• ベストアンサー

ListBoxでの Drag&Dropについて

List1で複数選択された項目をList2へドラッグ&ドロップでコピ ーしようと思います。 まず最初にList1のListIndex(1-3)を選択し色を反転させるとし ます。 その状態でドラッグ&ドロップを開始しようとし、List1の任意 のListIndexの部分をクリックするとその後からクリックされた 任意のListIndexの部分がドラッグ&ドロップの対象になり、最 初に予定したListIndex1-4は選択が解除されてしまいます。 これを回避するにはどのようにすればいいのでしょうか? VB6です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tak2003
  • ベストアンサー率32% (174/540)
回答No.2

D&Dでチャレンジしてみたのですが、DRAG中にセレクトが変わるので確定させて選択項目を配列に入れたりすると出来そうですね。 セレクトして確定コマンドなぞ押すか、確定してから一定時間で決定としてからドラッグするようにしないと無理そうですよ。 設計を見直したほうが良いみたいですね。 単にD&DしただけではSELECTEDが動いて駄目でした。 楽しそうな課題なのでがんばってください。

urourojp
質問者

補足

>DRAG中にセレクトが変わるので確定させて選択 >項目を配列に入れたりすると出来そうですね。 実質それでセレクトされていたIndexは取得可能 だと思うんですが、いざ、D&Dをしようとすると 色の反転している部分が後からセレクトされて いる部分に移動してしまって、直感的でないんで すよねぇ。 標準機能であっても良さそうな気もするんです が・・(-_-;)

その他の回答 (1)

  • tak2003
  • ベストアンサー率32% (174/540)
回答No.1

Private Sub Command1_Click() Dim flg As Boolean '重複フラグ Dim i As Integer 'リスト1の数 Dim j As Integer 'リスト2の数 For i = 0 To List1.ListCount - 1 If List1.Selected(i) = True Then flg = False For j = 0 To List2.ListCount - 1 If List2.List(j) = List1.List(i) Then flg = True Exit For End If Next j If flg = False Then List2.AddItem List1.List(i) End If End If Next i End Sub Private Sub Command2_Click() List2.Clear End Sub SHUWASYSTEMさんのサンプルソースです。 回答になっていないのですが、DRAG&DROPを使わないとこんな風にできますよ。

urourojp
質問者

補足

Commandボタンではできてたので、D&Dで書き直そうかと思いまして。。。

関連するQ&A

  • VB6.0のListBoxの使い方について

    VB6.0でリストボックスを3つ作成(配列index0~2)し、index=0のリストボックスをクリックした際にその項目を変数Xに入れたいのですが、X=List1.List(List.ListIndex)でやろうとするとエラーになります。なぜでしょう。何か参照になるサイトありますでしょうか?

  • ドラッグが勝手に解除される

    VB2007から2008へバージョンアップしたところ、ドラッグ&ドロップする途中で勝手にドラッグが解除されてしまいます。 あと、デスクトップの何も無いところで範囲選択(左クリックしたままマウスをズラす)しようとしても範囲指定が勝手に解除されてしまいます。 このような現象発生している方いらっしゃいますか? サポートに問い合わせてもまったく回答ありません。(既に2週間以上たちます)

  • Excelでドロップダウンリスト以外は入力できなくする

    Excel2007です。 入力規則を設定して、セルの入力値をドロップダウンリストから選択でいるように設定しましたが、手動でも入力できる状態になっています。 これを手動で入力できず、リストからしか選択できないようにしたいですが、どのように設定したらよいでしょうか、教えてください。 あと、セルの選択方法で、 1.反転選択(現在の選択範囲以外を選択する) 2.一部セルの選択解除(複数セルを選択した状態で、任意の一部のセルの選択状態を解除する) についても教えてください。

  • Excel VBA ListBoxについて

    お世話になります。 Excelで以下のようなフォーム画面を作成しております。 1.フォーム画面には、リストボックス、テキストボックス、登録ボタンを設定 2.リストボックスには、Sheet1のデータが表示される。 3.リストボックスのレコードを選択すると、選択した値がテキストボックスに表示される。 4.登録ボタンをクリックすると、テキストボックスのデータが、Sheet1に反映される。 今1~3まではできましたが、4で悩んでおります。 テキストボックスの値を取得してセルに反映させようと以下のコードを書きました。 'リストボックスで選択したレコード数 ListNo = Me.ListBox1.ListIndex 'TextBox1の値を、Sheet1のセルにセット Sheets("sheet1").Cells(ListNo, 1).Value = Me.TextBox1.Value  これを実行すると、何故かここから3のリストボックスのレコードをクリックしたイベントを呼びます。 Private Sub ListBox1_Click() クリックしてもいないのですが、Private Sub ListBox1_Click() を呼ばないようにしたいので、 ListBoxをEnableプロパティをfalseにしても、呼んでました。 呼びにいかない方法をご教授いただけますでしょうか。 よろしくお願いいたします。

  • 複数選択のListBoxでClickイベントが拾えません

    VBAのフォーム上で、複数選択ができるListBox1を作っています。 ListBox1を選択する度に、ListBox2へListBox1の選択内容で 絞り込んだListBox2のリストを作るという処理をしたいのですが、 ListBox1_ClickイベントでListBox1のリストクリック時に 何も反応がありません。 .MultiSelect = fmMultiSelectSingle で指定した複数リストボックスはClickイベントが拾えないのでしょうか? ListBox1リスト内のデータ選択・解除の度にイベントが 発生するようにしたいです。 宜しくお願いします。

  • OLE ドラッグアンドドロップの代わりに

    いつもお世話になっています。 VBに、OLEドラッグアンドドロップというのがVBでありますよね。 これと同じようなことを、Commandなどをクリックしたとき発生させたいのですが、どうすればよいでしょう。 具体的に言うと、これで実現できるようなデータの受け渡しをしたいのです。ドラッグアンドドロップをさせるのは面倒なので、なんとかデータをボタンクリック一つで実現させたいのです。 クリップボード経由を使うという手もあるかもしれませんが、これを使うと、特殊なデータは渡せないようですし…… つまり、ドラッグアンドドロップで受け渡されるDataObjectを、クリックだけで別のフォームやリッチテキストボックスなどに受け渡すというか貼り付けられるようにしたいのです。 DataObjectと似たようなものがあればいいんですが、見つかりませんし…… どうすればいいのか全く分かりません。些細な情報でも良いので、どうか教えてください。 よろしくお願いします。(ちなみに、VB6です)

  • ListViewで複数項目のドラッグ&ドロップ

    やりたいことは、エクスプローラのようなアイテムのドラッグ&ドロップです。 VB付属のリストビューをそのまま使うと、大きいアイコンで表示した時、複数選択してドラッグしても動くアイテムは、1つとなってしまいます。 複数アイテムを動かす方法を知っている方がいましたら教えてほしいのですが。 環境は、 Windows2000SP3 VisualBasic6SP5 です。

  • ドラッグ&ドロップによる項目移動

    ドラッグ&ドロップによる項目の移動が出来るかどうかを教えて頂きたいです。 また出来るのであればやり方(参考サイト等)教えて下さい>< 検索してもドラッグ&ドロップでファイルパスの取得とかしか出ないので困っています>< ・リストボックスを2つ配置して選択している項目を2つのリストボックス間で移動したいです。 (1)リストボックス1の項目を選択 (2)リストボックス2へドラッグ&ドロップ (3)リストボックス1では選択されていた項目を削除、リストボックス2へは項目を追加 ・DataGridViewなどのテーブル表示の列の入れ替え Windowsのフォルダで「名前、更新日時、種類、サイズ、...」と並んでいる項目をマウス操作で入れ替えなど出来ますよね?あんな事も出来たりしませんかね? 「マウスでのドラッグ&ドロップで操作する」がポイントです よろしくお願いします。

  • リストボックスから複数行を選択し、その複数のデータをセルに入力したい

    Excel2003でマクロをつくっています。シートのB列を右クリックすると、リストボックスが表示され 任意1行を選択するとシートのB列、C列、D列のセルにデーターが入力されます。 Private Sub ListBox2_Click() With ListBox2 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ’シートが保護されていたら保護を解除 If ActiveSheet.ProtectContents = True Then ActiveSheet.Unprotect End If ActiveCell.Value = ListBox2.List(ListBox2.ListIndex, 0) ActiveCell.Offset(0, 1).Value = ListBox2.List(ListBox2.ListIndex, 1) ActiveCell.Offset(0, 2).Value = ListBox2.List(ListBox2.ListIndex, 2) ActiveSheet.Protect End If End With Unload UserForm3 End Sub このリストボックスから複数の行を選択し、シートのB列、C列、D列のセルにデーターを入力したいのですが、Multiselectプロパティを変更しても、一行のみしか入力できません。 上のコードをどうかえたらよろしいでしょうか。

  • リストビューでのドラッグ&ドロップでの反転表示

    VC++にてエクスプローラもどきを作成していて、 ドラッグ&ドロップの操作を実装中です。 ListViewにて、OnLButtonDown内で マウスで押下されたフォルダイメージを CreateDragImageで作成しマウスカーソルを変更しました。 そして、ドラッグ中に、別フォルダへカーソルが移動した際、 そのフォルダを反転させるために、 OnDragOver内で、まず、全ての選択状態をクリアし、 for ( i = 0; i < list.GetItemCount(); i++ ){   item.iItem = i;   ListView_GetItem( list, &item2 );   item2.state = 0;   item2.stateMask = LVIS_SELECTED;   ListView_SetItem( list, &item ); } 対象となるフォルダのLV_ITEMを取得後に、 item.state = LVIS_SELECTED; item.stateMask = LVIS_SELECTED; ListView_SetItem( list, &item ); を行い選択状態に変更させました。 一応、ドラッグ&ドロップは、ある程度できているのですが、 描画が汚く、下記の2点について困っています。 1.ドラッグされたフォルダの反転表示が綺麗ではない(画像参照) 2.カーソル下に何のフォルダも無い場合は、   全ての選択状態をクリアだけでDragOverの処理を終了しているが、   前回選択状態にしたフォルダが反転表示(汚い状態で…)されたまま なにか、修正方法はありますでしょうか?