水如烟

                 顺其自然,水到渠成 LzmTW

文或代码皆是面向初学者.我是爱好者,也是初学者.那些"文章",只按自己理解写,我是不知术语名词的.所以只供参考,也仅供参考.

导航

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

Posted on 2005-10-17 00:08  水如烟(LzmTW)  阅读(291)  评论(0编辑  收藏  举报

Author:水如烟
当然,这里所谓的文件是指完整的文件名称,至于文件的内容,须按实际情况进一步的操作。
我这里的控件为一个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 ObjectByVal 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 ObjectByVal 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 BooleanAs Long
    
Private Declare Function DragQueryFile Lib "shell32.dll" (ByVal hDrop As IntPtr, ByVal file As IntegerByVal 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, Nothing0)
            
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 ObjectByVal e As System.EventArgs) Handles MyBase.Load
        DragAcceptFiles(ListBox1.Handle, 
True)
    
End Sub