Drag & Drop を使うには

投稿日 2016/04/05

[Home] 

Explorer からのドラッグ&ドロップを受け入れる

ここではデスクトップアプリケーションで Explorer からファイルやディレクトリをフォームにドラッグ&ドロップする方法を示します。ドラッグ&ドロップを有効にするためにはフォーム(または対象のコントロール)の AllowDrop プロパティを True に設定しておく必要があります。


''' <summary>
''' ファイルをドラッグ中
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub Form1_DragOver(sender As Object, e As DragEventArgs) Handles MyBase.DragOver
    ' Explorer からのドラッグか判別する。
    If e.Data.GetDataPresent(DataFormats.FileDrop) Then
        ' マウスカーソルの形状を + に変更する。
        e.Effect = DragDropEffects.Copy
    End If
End Sub

''' <summary>
''' ファイルをドロップ
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub Form1_DragDrop(sender As Object, e As DragEventArgs) Handles MyBase.DragDrop
    ' Explorer からのドロップか判別する。
    If e.Data.GetDataPresent(DataFormats.FileDrop) Then
        ' 複数ファイルをドロップする可能性もあるので配列に格納する。
        Dim files As String() = e.Data.GetData(DataFormats.FileDrop)
        ' ここでは1個だけ(先頭だけ)をテキストボックスに表示する。
        txtFileNme.Text = files(0)
    End If
End Sub

Explorer へドラッグ&ドロップする

逆に Explorer へドラッグ&ドロップすることもできます。その場合は、コントロールの DoDragDrop メソッドを使います。次の例ではマウスボタンが下がった時に、テキストボックスから Explorer へドラッグ&ドロップを行います。

''' <summary>
''' テキストボックスでマウスボタンが下がった時
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub TextBox2_MouseDown(sender As Object, e As MouseEventArgs) Handles TextBox2.MouseDown
    TextBox2.SelectAll()
    Dim files() As String = {TextBox2.Text}
    Dim dataObj As New DataObject(DataFormats.FileDrop, files)
    TextBox2.DoDragDrop(dataObj, DragDropEffects.Copy)
End Sub

フォーム上のコントロールどうしでドラッグ&ドロップ

コントロールどうしでドラッグ&ドロップをすることもできます。この例では相互にドラッグ&ドロップを行うので、両方のリストボックスの AllowDrop プロパティを True にしておきます。

''' <summary>
''' リストボックスでドラッグ中
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub ListBox_DragOver(sender As Object, e As DragEventArgs) Handles ListBox1.DragOver, ListBox2.DragOver
    e.Effect = DragDropEffects.All
End Sub

''' <summary>
''' リストボックスでドロップ
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub ListBox_DragDrop(sender As Object, e As DragEventArgs) Handles ListBox1.DragDrop, ListBox2.DragDrop
    Dim lbox As ListBox = DirectCast(sender, ListBox)
    Dim text As String = e.Data.GetData("Text", True)
    If lbox Is ListBox1 Then
        ListBox1.Items.Add(text)
    Else
        ListBox2.Items.Add(text)
    End If

End Sub

''' <summary>
''' リストボックスでマウスボタンが下がった時
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub ListBox_MouseDown(sender As Object, e As MouseEventArgs) Handles ListBox1.MouseDown, ListBox2.MouseDown
    Dim lbox As ListBox = DirectCast(sender, ListBox)
    Dim text As String = lbox.SelectedItem.ToString()
    Dim dataObj As New DataObject(DataFormats.FileDrop, text)
    lbox.DoDragDrop(text, DragDropEffects.All)
End Sub

 

 


 

このページの先頭へ