怎样从资源管理器中拖放文件到控件

王朝other·作者佚名  2008-05-19
宽屏版  字体: |||超大  

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

我这里的控件为一个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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有