我正在尝试使用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
答案 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 .....