0

私のプロジェクトでは、ユーザーはいくつかのパスを定義する必要があります。ボタンをクリックすると、ウィンドウが開き、ファイル/フォルダーをウィンドウエクスプローラーからこのウィンドウにドラッグアンドドロップできます。次に、私のアプリケーションはそのパスを取り、それを保存します。

設定ページへのボタンがあるメインフォームがあります。これにより、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ユーザーが毎日経験するのと同じように)。これは間違いなくMicrosoftが取り組む必要のあることです。私を悩ませているのは、この問題はすでに古いということです。Vistaも同じように動作しました。

あなたができることは2つあります(1つは醜い、もう1つは迷惑です)

醜い:UACを無効にします。しかし、それが提供するすべての追加のセキュリティを失います。

迷惑:別のファイルマネージャーを使用して、管理者としても実行するなぜ別のファイルマネージャーなのか?実際にWindowsエクスプローラーを昇格させることはできないからです。Windowsエクスプローラーアイコンのコンテキストメニューにオプションが表示され、UACプロンプトが表示されているにもかかわらず、Windowsエクスプローラーは昇格されません。

于 2013-03-11T09:16:43.863 に答える