DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ドラッグ&ドロップ

環境/言語:[VB.NET )、.NET Framework1.1]
分類:[.NET]

二つのリストボックス間で、複数選択のデータをドラッグ&ドロップする方法を教えてください。
■No6483に返信(みやびさんの記事)
> 二つのリストボックス間で、複数選択のデータをドラッグ&ドロップする方法を教えてください。

このサイトの以下のページの最後の方の「補足」の部分をご覧ください。
http://dobon.net/vb/dotnet/control/draganddrop.html

ListViewでのやり方なら実際にやったので提示できますが・・・
レスありがとうございます。
ListViewに変更したほうがよさそうですね。

> ListViewでのやり方なら実際にやったので提示できますが・・・
ぜひお願いします。
少々長くなってしまいますが・・・

-----------------コード部分---------------------------------

' ListView1からドラッグ開始
Private Sub ListView1_ItemDrag( _
                ByVal sender As System.Object, _
                ByVal e As System.Windows.Forms.ItemDragEventArgs) _
                    Handles ListView1.ItemDrag

    ' マウスの左ボタンでドラッグ?
    If e.Button = MouseButtons.Left Then
        Dim _listView As ListView
        _listView = CType(sender, ListView)

        ' 複数項目選択?
        If _listView.SelectedItems.Count >= 2 Then
            DoDragDrop(_listView.SelectedItems, _
                       DragDropEffects.Move Or DragDropEffects.Copy)
        Else
            DoDragDrop(e.Item, _
                       DragDropEffects.Move Or DragDropEffects.Copy)
        End If
    End If
End Sub

' ListView2へドラッグ中
Private Sub ListView2_DragOver( _
                ByVal sender As Object, _
                ByVal e As System.Windows.Forms.DragEventArgs) _
                    Handles ListView2.DragOver

    ' ドロップされたデータが何か調べる
    If e.Data.GetDataPresent(GetType(ListViewItem)) Then
        e.Effect = DragDropEffects.Copy Or DragDropEffects.Move

    ElseIf e.Data.GetDataPresent( _
                GetType(ListView.SelectedListViewItemCollection)) Then
        e.Effect = DragDropEffects.Copy Or DragDropEffects.Move
    Else
        e.Effect = DragDropEffects.None
    End If
End Sub

' ListView2へドロップ
Private Sub ListView2_DragDrop( _
                ByVal sender As Object, _
                ByVal e As System.Windows.Forms.DragEventArgs) _
                    Handles ListView2.DragDrop

    ' ドロップされたデータが何か調べる
    If e.Data.GetDataPresent(GetType(ListViewItem)) Then    
        ' ListViewItem 単一選択時
        ' ドロップされたデータの取得
        Dim mitem As ListViewItem = e.Data.GetData(GetType(ListViewItem))

        ' 処理

    ElseIf e.Data.GetDataPresent( _
                GetType(ListView.SelectedListViewItemCollection)) Then
        ' ListViewItem 複数選択時
        ' ドロップされたデータの取得
        Dim mitem As ListView.SelectedListViewItemCollection = _
            e.Data.GetData( _
                GetType(ListView.SelectedListViewItemCollection))

        ' 処理

    End If
End Sub

------------------------------------------------------------

ListView2_DragOverはListView2_DragEnterでも対応できます。
DragEnterはそのコントロール内にドラッグされたときに発生し、
DragOverはそのコントロール内でドラッグされている最中発生します。
必要なほうで対応して下さい。
ListView2のAllowDropプロパティをTrueにするのを忘れないで下さい。
また、そのコントロール外へドラッグされた時には
DragLeaveイベントが発生します。
調べてみるといいかもしれません。

レスが遅くなってしまってすみませんでした。
2004/10/07(Thu) 15:01:35 編集(投稿者)

>■No6522に返信(rakiさんの記事)

ありがとうございます!
大変助かりました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板