2

ドラッグ アンド ドロップ機能を使用するプログラムを作成しようとしていますが、コントロールではなくフォームに何かをドロップした場合にのみ機能します。コントロールを試してみると、「使用不可」カーソルが表示されます。

AllowDrop プロパティはプロパティ バーで設定され、フォームの読み込み時にも設定します。なぜ私はまだ物を落とすことができないのか分かりません。誰かが以前にこの問題を抱えていましたか?

現在のコード:

Public Class Main

Private Sub Main_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragDrop
    If e.Data.GetDataPresent("FileDrop", True) = True Then

        Dim Files() As String
        Dim i As Integer

        Files = e.Data.GetData(DataFormats.FileDrop)

        For i = 0 To Files.Length - 1
            FileList.Items.Add(Files(i))
        Next

    End If
End Sub

Private Sub Main_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
    End If
End Sub

Private Sub Main_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles     Me.Load
    Me.AllowDrop = True
    FilePath.AllowDrop = True
    FileList.AllowDrop = True
End Sub
End Class
4

3 に答える 3

3

対応するイベントの各コントロールに DragDrop-Effect を指定する必要があります。に設定AllowDropする以外Trueに、イベント ハンドラを追加する必要があります。たとえば、次のようにします。

Private Sub Main_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles     Me.Load 
    Me.AllowDrop = True 
    FilePath.AllowDrop = True 
    AddHandler FilePath.DragEnter, AddressOf Main_DragEnter
    FileList.AllowDrop = True 
    AddHandler FileList.DragEnter, AddressOf Main_DragEnter
End Sub

その場合、Main_DragEnter メソッドにより適した名前を選択する必要があります。

于 2012-05-16T20:24:45.393 に答える
1

変化する

Private Sub Main_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
    End If
End Sub

Private Sub Main_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles FilePath.DragEnter, FileList.DragEnter
    If e.Data.GetDataPresent(DataFormats.FileDrop) Then
        e.Effect = DragDropEffects.All
    End If
End Sub

フォーム自体ではなく、両方のコントロールの DragEnter イベントを処理する必要があります。

于 2012-05-17T13:27:05.980 に答える