VB.NETでエクスプローラからファイルをドラッグ&ドロップで設定する方法について説明する。
ドラッグ&ドロップに対応するには、対象フォームで以下の設定を行う。
 1.AllowDropプロパティをTrueにする
 2.DragEnterイベントを作成する
 3.DragDropイベントを作成する

1.AllowDropプロパティ
 このプロパティをTrueにすると、フォームに対するドラッグ&ドロップが有効になる。
 (Falseでは、ドラッグ&ドロップは無効)
2.DragEnterイベント
 ドラッグ中のマウスカーソルがフォームに入った時に発生するイベント。
 このタイミングで、ドラッグ中のデータがファイルであることを確認し、処理を振り分ける。
3.DragDropイベント
 マウスのボタンが離された時に発生するイベント。
 このタイミングでドラッグ&ドロップ操作が完了となる。

以下、サンプル。
【事前準備】
 ・Form1を作成する。
 ・Form1のAllowDropプロパティをTrueに設定する。

Form1のイベントとして、以下を記述する。

'ドラッグ&ドロップで入力したファイルのパスをリッチテキストに表示する。
Public Class Form1
 'ドラッグ中のオブジェクトがファイルであるか確認する
 Private Sub Form1_DragEnter(ByVal sender As System.Object, _
  ByVal e As System.Windows.Forms.DragEventArgs) _
  Handles MyBase.DragEnter

  'データ形式の確認
  If e.Data.GetDataPresent(DataFormats.FileDrop) = False Then
   Return
  End If

  'ドラッグしているファイル/フォルダの取得
  Dim FilePath() As String = _
   CType(e.Data.GetData(DataFormats.FileDrop), String())

  For idx As Integer = 0 To FilePath.Length - 1
   If Not System.IO.File.Exists(FilePath(idx)) Then
    Return
   End If
  Next idx

  'ドロップ可能な場合は、エフェクトを変える
  e.Effect = DragDropEffects.Copy
 End Sub

 'ファイルパスを設定する
 Private Sub Form1_DragDrop(ByVal sender As Object, _
  ByVal e As DragEventArgs) Handles MyBase.DragDrop
 
  'ドラッグしているファイル/フォルダの取得
  Dim FilePath() As String = _
   CType(e.Data.GetData(DataFormats.FileDrop), String())

  ファイルパスをリッチテキスト(FilePathRichText)に表示する 
  FilePathRichText.Clear()
  For idx As Integer = 0 To FilePath.Length - 1
   FilePathRichText.AppendText(FilePath(idx) & _
    System.Environment.NewLine)
  Next idx
 End Sub
End Class

これで、アプリケーションに対して、エクスプローラからファイルをドラッグ&ドロップすることができるようになる。

【補足事項】
・ファイル以外にも識別可能な形式(BitMap、テキスト等)がある。
・e.Data.GetDataPresent()メソッドでデータ形式(ファイルかどうか)を確認する。
・e.Data.GetData()は、内容を取得する場合に利用する。
 →DataFormats.FileDropを引数に指定した場合、戻り値の型は、String配列となる。
  (ファイルパス(文字列)を返すが、複数選択可能なので、String配列となる)
  DataFormats.FileDrop以外を指定した場合、戻り値の型は、Object型となる。
・以下の処理では、ファイルとフォルダ(ディレクトリ)のパスを取得する。
 Dim FilePath() As String = _
   CType(e.Data.GetData(DataFormats.FileDrop), String())
・ファイルのみを有効としたい場合には、以下の処理が必要となる。
 If Not System.IO.File.Exists(FilePath(idx)) Then
  'ファイルが存在しないので、ディレクトリとして認識する
 End If
・フォルダ(ディレクトリ)のみ有効としたい場合には、以下の処理が必要となる。
 If Not System.IO.Directory.Exists(FilePath(idx)) Then
  'フォルダが存在しないので、ファイルとして認識する
 End
・フォーム上に配置したコントロール上では、ドラッグ&ドロップは機能しない。
 →Dockプロパティを設定している場合、ドラッグ&ドロップできる範囲に注意!
入力支援の一つとして考えること!
 →入力手段として強制することは避けること!
  必ず、ファイルダイアログの表示等の入力方法を実装しておくこと!