2

我正在尝试制作一个使用拖放功能的程序,但是,它仅在我将某些内容拖放到表单而不是控件时才有效。如果我尝试使用控件,我只会得到“不可用”光标。

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
4

3 回答 3

5

我知道这是一个旧线程,但我会发布我发现的内容,以防其他人像我过去 2 小时一直在做的那样把头发拉出来。

如果 VS 在 Administrator mode 下启动,则将文件拖放到表单(或表单的组件)上不起作用

呜呜呜……

于 2017-02-07T09:51:34.853 回答
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 方法的名称。

于 2012-05-16T20:24:45.393 回答
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 事件。

于 2012-05-17T13:27:05.980 回答