【问题标题】:Drag & Drop .Net拖放.Net
【发布时间】:2020-08-18 02:59:29
【问题描述】:
通常我们可以将一个图标 (.lnk) 放到 WinForms 中以使其成为“目标”,事实上这是一项非常简单的任务。但是,Windows 10 发生了什么变化,我如何使用 Windows 10 开始菜单图标(它是符号链接吗?或者有没有办法在将其放入表单后获取其目标路径。当您拖动任何其他图标你得到一个+符号(它是允许的)然后检索路径,如果它是从开始菜单中的一个图标,你会得到一个带有一条线的圆圈(不能放下它)。所以我不知道为什么。有人有什么想法吗?
我无法将 Windows 10“图标”拖放到我的表单中是否有原因?如果是这样,可以修复吗?最后。除此之外,如果我放下它时它不是 .lnk,我怎么能得到它的“目标路径”?
【问题讨论】:
标签:
.net
forms
symlink
drag
drop
【解决方案1】:
我发现了为什么它不适合你。
问题通常是当我们过去这样做时,我们会将“效果”设置为复制。大多数都这样做。在这种情况下,您需要将效果设置为 .link
e.Effect = (If(e.Data.GetFormats().Any(Function(f) f = DataFormats.FileDrop), DragDropEffects.Link, DragDropEffects.All))
然后它将允许您“链接”该文件,该文件将为您提供开始菜单项的 .lnk(除了 UWP ,我现在想弄清楚)
【解决方案2】:
我不确定您的源代码的完整外观,但在您的 .DragEnter 事件中使用 .Link 而不是常规的 .Copy 将允许您将开始菜单图标拖到表单上
我有一个简单的 winform,带有一个允许在这个项目中放置的标签
Imports System.IO
Public Class Form1
Private Sub DropHere_DragDrop(sender As Object, e As DragEventArgs) Handles lblDropHere.DragDrop
Dim file() As String = e.Data.GetData(DataFormats.FileDrop)
MessageBox.Show(Path.GetFullPath(file(0)))
End Sub
Private Sub DropHere_DragEnter(sender As Object, e As DragEventArgs) Handles lblDropHere.DragEnter
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
e.Effect = DragDropEffects.Link
End If
End Sub
End Class
我通过在应用程序中反复使用的拖放操作对其进行了修改