0

在我的项目中,用户必须定义​​一些路径。通过单击按钮,将打开一个窗口,您可以在其中将文件/文件夹从 Windows 资源管理器拖放到该窗口。然后我的应用程序将采用该路径并存储它。

我有一个主表单,其中是设置页面的按钮。这将通过 form.show 打开新表单。在这个新表单中,我有另一个按钮。通过单击它,将打开另一个小表单,您可以在其中放置东西(form.show)。这就是事情变得棘手的地方。我无法进行拖放工作。

Public Class drag

    Private Sub dragdrop_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.TopMost = True
        Me.AllowDrop = True
    End Sub

    Private Sub drag_DragDrop(sender As System.Object, e As System.Windows.Forms.DragEventArgs) Handles Me.DragDrop
        Dim theFiles() As String = CType(e.Data.GetData("FileDrop", True), String())
        For Each theFile As String In theFiles
            MsgBox(theFile)
        Next
    End Sub

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

如果我创建新项目并将确切的代码粘贴到 form1,它就可以工作。为什么它不适用于这个多形式项目,我该如何解决?

4

1 回答 1

0

我发现了问题。在 Vista/7/8 中以管理员权限运行应用程序很安全。

问题与安全权限的工作方式有关。从普通应用程序拖放到提升的应用程序的能力将破坏 UAC 背后的安全模型。但是,我不清楚为什么不显示 UAC 提示,从而允许临时提升操作(就像每天的任何 linux 用户体验一样)。这绝对是微软需要做的事情。困扰我的是这个问题已经很老了。Vista的行为相同。

你可以做两件事(一件丑陋,一件烦人)

丑陋:禁用UAC。但是您会失去它提供的所有额外安全性。

烦人:使用另一个文件管理器并以管理员身份运行它 为什么要另一个文件管理器?因为您实际上无法提升 Windows 资源管理器。尽管在 Windows Explorer 图标的上下文菜单中看到了该选项并显示了 UAC 提示,但事实是 Windows Explorer 不会被提升。

于 2013-03-11T09:16:43.863 回答