【问题标题】:Drag and Drop not working on shortcut or exefile拖放不适用于快捷方式或exe文件
【发布时间】:2019-07-22 22:13:30
【问题描述】:

应用程序运行时拖放操作正常。但是当文件被拖放到应用程序快捷方式或 exe.file 上时,不会触发拖放事件,只是应用程序启动。

我在 Visual Studio 2019 中创建了简单的应用程序,只有 Form1 并进行了以下调整

Form1.AllowDrop = True 

Private Sub Form1_DragEnter(sender As Object, e As DragEventArgs) Handles MyBase.DragEnter
   If (e.Data.GetDataPresent(DataFormats.FileDrop)) Then
      e.Effect = DragDropEffects.Copy
   End If
End Sub

Private Sub Form1_DragDrop(sender As Object, e As DragEventArgs) Handles MyBase.DragDrop
   Dim files() As String = CType(e.Data.GetData(DataFormats.FileDrop), String())
   Me.Text = files(0)
End Sub

您能帮我打开应用程序图标/快捷方式上的正确文件名吗?

谢谢,马丁

【问题讨论】:

  • Me.Text = files(0): 你应该在那里添加一些安全检查。文件 DragDrop 还包括文件夹,而不仅仅是文件。这取决于您要处理的内容。

标签: vb.net winforms


【解决方案1】:

您的代码仅处理表单本身的拖放操作(可以通过AllowDrop = True 使用任何其他控件来完成)。将文件拖放到应用程序可执行文件(或快捷方式)上是完全不同的事情。它所做的只是正常打开应用程序,但传递给它的命令行参数(即文件/文件夹路径)。

要检索该文件/文件夹路径,您可以使用Environment.GetCommandLineArgs 来读取命令行参数,确保它返回至少两个元素(第一个是应用程序的可执行路径),然后显示第二个(或倒数第二个)元素。

这应该可行:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim args = Environment.GetCommandLineArgs()
    If args.Length > 1 Then Me.Text = args(1)
End Sub

如果您将多个文件拖放到程序的图标上并且想要全部显示,您可以将上面的代码调整为如下所示:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim args = Environment.GetCommandLineArgs()
    For Each arg In args.Skip(1)
        ' Do something with `arg`.
    Next
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 2011-01-14
    • 1970-01-01
    相关资源
    最近更新 更多