VB.NET DragAndDrop无法处理控件

时间:2012-05-16 17:43:23

标签: vb.net drag-and-drop

我正在尝试使用drag& amp;但是,只有当我将某些东西放到窗体上而不是控件上时,它才起作用。如果我尝试控件,我只是得到'不可用'光标。

AllowDrop属性在属性栏中设置,我也在表单加载时设置它。 我不知道为什么我仍然不能放弃;以前有人有这个问题吗?

当前代码:

Public Class Main

Private Sub Main_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragDrop
    If e.Data.GetDataPresent("FileDrop", True) = True Then

        Dim Files() As String
        Dim i As Integer

        Files = e.Data.GetData(DataFormats.FileDrop)

        For i = 0 To Files.Length - 1
            FileList.Items.Add(Files(i))
        Next

    End If
End Sub

Private Sub Main_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragEnter
    If e.Data.GetDataPresent(DataFormats.FileDrop) Then
        e.Effect = DragDropEffects.All
    End If
End Sub

Private Sub Main_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles     Me.Load
    Me.AllowDrop = True
    FilePath.AllowDrop = True
    FileList.AllowDrop = True
End Sub
End Class

3 个答案:

答案 0 :(得分:3)

您必须为相应事件中的每个控件指定DragDrop-Effect。因此,除了将AllowDrop设置为True之外,您还必须添加一个事件处理程序。例如:

Private Sub Main_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles     Me.Load 
    Me.AllowDrop = True 
    FilePath.AllowDrop = True 
    AddHandler FilePath.DragEnter, AddressOf Main_DragEnter
    FileList.AllowDrop = True 
    AddHandler FileList.DragEnter, AddressOf Main_DragEnter
End Sub

也许你应该选择一个更适合Main_DragEnter方法的名称。

答案 1 :(得分:1)

更改

Private Sub Main_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragEnter
    If e.Data.GetDataPresent(DataFormats.FileDrop) Then
        e.Effect = DragDropEffects.All
    End If
End Sub

Private Sub Main_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles FilePath.DragEnter, FileList.DragEnter
    If e.Data.GetDataPresent(DataFormats.FileDrop) Then
        e.Effect = DragDropEffects.All
    End If
End Sub

您应该为两个控件而不是表单本身处理DragEnter事件。

答案 2 :(得分:1)

我知道这是一个老话题,但我会发布我发现的内容,以防其他人在那里拉出他们的头发,就像我过去2小时一直在做的那样。

  

将文件拖放到表单(或表单的组件)如果VS以管理员模式启动,则无法正常工作。

Grrrrrrrr .....