HOW TO:从资源管理器中拖放文件到控件

HOW TO :从资源管理器中拖放文件到控件

当然,这里所谓的文件是指完整的文件名称,至于文件的内容,须按实际情况进一步的操作。

我这里的控件为一个 ListBox 。代码如下:

Private Sub Form1_Load( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase .Load

Me .ListBox1.AllowDrop = True

End Sub

Private Sub ListBox1_DragEnter( ByVal sender As Object , ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox1.DragEnter

Dim o As Object = e.Data.GetData(DataFormats.FileDrop)

If Not o Is Nothing Then

e.Effect = DragDropEffects.Copy

End If

End Sub

Private Sub ListBox1_DragDrop( ByVal sender As Object , ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox1.DragDrop

Dim FileNames As String () = CType (e.Data.GetData(DataFormats.FileDrop), String ())

Me .ListBox1.Items.AddRange(FileNames)

End Sub

重写这个 HOW TO ,主要的是看到有人用 API 实现,代码如下:

Private Const WM_DROPFILES As Integer = 563

Private Declare Function DragAcceptFiles Lib "shell32.dll" ( ByVal hwnd As IntPtr, ByVal accept As Boolean ) As Long

Private Declare Function DragQueryFile Lib "shell32.dll" ( ByVal hDrop As IntPtr, ByVal file As Integer , ByVal fileName As System.Text.StringBuilder, ByVal size As Int32) As Int32

Private Declare Sub DragFinish Lib "Shell32.dll" ( ByVal hDrop As IntPtr)

Protected Overrides Sub WndProc( ByRef m As System.Windows.Forms.Message)

If m.Msg = WM_DROPFILES Then

Dim iNumOfFiles As Int32 = DragQueryFile(m.WParam, &HFFFFFFFF, Nothing , 0)

Dim iPnt As Int32

For iPnt = 0 To iNumOfFiles - 1

Dim sb As New System.Text.StringBuilder(256)

Dim iRet As Int32 = DragQueryFile(m.WParam, iPnt, sb, sb.Capacity)

ListBox1.Items.Add(sb.ToString)

Next

DragFinish(m.WParam)

Else

MyBase .WndProc(m)

End If

End Sub

Private Sub Form1_Load( ByVal sender As Object , ByVal e As System.EventArgs) Handles MyBase .Load

DragAcceptFiles(ListBox1.Handle, True )

End Sub

Published At
Categories with Web编程
Tagged with
comments powered by Disqus