Here's some code I've been testing using ShellUtils.dll. If there is a better way, please let me know.
Code:
Imports ShellUtils
Public Class frmDragDrop
Private m_dtTest As ShellUtils.DropTarget = Nothing
Private Sub frmDragDrop_DragDrop(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragDrop
'Add code to handle "drop" here
End Sub
Private Sub frmDragDrop_DragEnter(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragEnter
e.Effect = DragDropEffects.None
If e.Data.GetDataPresent(DataFormats.FileDrop) Then _
e.Effect = DragDropEffects.Copy
m_dtTest.DragEnter(Me.PointToClient(New Point(e.X, e.Y)), e.Effect, e.Data)
End Sub
Private Sub frmDragDrop_DragLeave(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.DragLeave
m_dtTest.DragLeave()
End Sub
Private Sub frmDragDrop_DragOver(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragOver
e.Effect = DragDropEffects.None
If e.Data.GetDataPresent(DataFormats.FileDrop) Then _
e.Effect = DragDropEffects.Copy
m_dtTest.DragOver(Me.PointToClient(New Point(e.X, e.Y)), e.Effect)
End Sub
Private Sub frmDragDrop_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load
Me.AllowDrop = True
m_dtTest = New DropTarget(Me.Handle)
End Sub
End Class