2

Windowsエクスプローラーからフォームにファイルをドロップしようとしていますが、ほぼ成功しています:)
シェルでエクスプローラーウィンドウを開いた後、受け入れる前にメッセージボックス/ダイアログが1つあるフォームにファイルをドロップできます。

問題は、実際には、質問のあるメッセージボックスがエクスプローラーウィンドウの後ろに開くことです。コードは次のとおりです。

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Me.AllowDrop = True
End Sub

Private Sub Form1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragDrop
    If e.Data.GetDataPresent(DataFormats.FileDrop) Then
        Dim Files() As String
        Files = e.Data.GetData(DataFormats.FileDrop)
        If Files.Length > 0 Then
            Dim ret As Integer = MsgBox("Would you like to upload file?" & vbNewLine & Files(0), MsgBoxStyle.OkCancel + MsgBoxStyle.Question, "Decide please")
            If ret = DialogResult.OK Then
                myModule.UploadF()
            End If
        End If
    End If
End Sub

Private Sub Form1_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
    Else
        e.Effect = DragDropEffects.None
    End If
End Sub

Private Sub btn_open_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_open.Click
    Shell("explorer c:\", AppWinStyle.NormalFocus)
End Sub

End Class

1)メッセージボックスをエクスプローラウィンドウの前に表示させる方法はありますか?
2) 使用後にプログラムから開いているエクスプローラー ウィンドウを閉じるには?

編集: 解決策...
1) Me.Activateを MsgBox の前に配置することです!
2)そのため、私はまだ解決策を見つけていません。

4

2 に答える 2

2

あなたがすでに回答を受け入れていることは知っていますが、この実装には欠陥があるというハンスに同意します。ユーザーがアップロード ボタンをクリックする必要がある場合は、openfiledialog を起動します。ドラッグしなければならない単純なエクスプローラー ウィンドウを開くことは、信じられないほど直感的ではありません。

ドラッグ アンド ドロップ機能をそのまま使用できますが、ユーザーが独自のエクスプローラー ウィンドウを開いて使用できるようにします。

より直感的な実装は、ドラッグドロップ機能をパネルに追加し、ラベルとボタンを用意して、ユーザーがいずれかの方法を選択できるようにすることです。

このようなもの:

ここに画像の説明を入力

于 2012-12-11T10:32:41.860 に答える
1

これを試して:

プロジェクトにダイアログを追加します。(フォーム、クラスなどの追加可能なもののリストにあります)。それにラベルを追加し、コンストラクターでテキストを変更します。ダイアログのペイント イベントに次のコードを追加します。

Me.BringToFront()

次に、MsgBox の代わりにこのダイアログを使用します。必要なものが提供されるはずです。

これは多少の回避策ですが、うまくいくはずです。

編集:

そうです、より良い解決策を見つけました。

MsgBox を呼び出す前に、この質問に記述されたコードにこれを追加します。

Me.BringToFront()
Me.TopMost = True

そして、あなたは元気になります。

于 2012-12-11T06:47:16.470 に答える