DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

Drag&Dropされたファイルのファイル名を取得する

エクスプローラからDrag&Dropされたファイルのファイル名(フルパス)を取得する方法です。

次の例ではリストボックスコントロールListBox1にDrag&Dropされたすべてのファイルのファイル名を表示しています。ListBox1のAllowDropプロパティをTrueにしてください。

VB.NET
コードを隠すコードを選択
Private Sub ListBox1_DragEnter(ByVal sender As Object, _
        ByVal e As System.Windows.Forms.DragEventArgs) _
        Handles ListBox1.DragEnter
    'コントロール内にドラッグされたとき実行される
    If e.Data.GetDataPresent(DataFormats.FileDrop) Then
        'ドラッグされたデータ形式を調べ、ファイルのときはコピーとする
        e.Effect = DragDropEffects.Copy
    Else
        'ファイル以外は受け付けない
        e.Effect = DragDropEffects.None
    End If
End Sub

Private Sub ListBox1_DragDrop(ByVal sender As Object, _
        ByVal e As System.Windows.Forms.DragEventArgs) _
        Handles ListBox1.DragDrop
    'コントロール内にドロップされたとき実行される
    'ドロップされたすべてのファイル名を取得する
    Dim fileName As String() = CType( _
        e.Data.GetData(DataFormats.FileDrop, False), _
        String())
    'ListBoxに追加する
    ListBox1.Items.AddRange(fileName)
End Sub
C#
コードを隠すコードを選択
//ListBox1のDragEnterイベントハンドラ
private void ListBox1_DragEnter(object sender,
    System.Windows.Forms.DragEventArgs e)
{
    //コントロール内にドラッグされたとき実行される
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
        //ドラッグされたデータ形式を調べ、ファイルのときはコピーとする
        e.Effect = DragDropEffects.Copy;
    else
        //ファイル以外は受け付けない
        e.Effect = DragDropEffects.None;
}

//ListBox1のDragDropイベントハンドラ
private void ListBox1_DragDrop(object sender,
    System.Windows.Forms.DragEventArgs e)
{
    //コントロール内にドロップされたとき実行される
    //ドロップされたすべてのファイル名を取得する
    string[] fileName =
        (string[]) e.Data.GetData(DataFormats.FileDrop, false);
    //ListBoxに追加する
    ListBox1.Items.AddRange(fileName);
}

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。