PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Visual Basic .Net] Drag&Drop


Iceman346
2008-05-15, 13:58:01
Folgendes Problem:
Ich hab in meinem Programm ein ListBox Element in dem ich den Inhalt eines Verzeichnisses aufliste. Nun hab ichs so programmiert, dass man einfach Dateien auf dieses Element ziehen kann um sie in das Verzeichnis zu kopieren, dass funktioniert auch wunderbar.

Was ich jetzt noch gerne hätte wäre ne Möglichkeit einen Eintrag in der ListBox zu markieren und per Drag&Drop auf den Desktop oder in normale Windows Ordner zu ziehen um die Datei dorthin zu kopieren. Ich hab aber ehrlich gesagt keine Ahnung wie ich das hinkriegen soll.

Mit folgendem Code krieg ich zwar ne Drag&Drop Aktion gestartet, aber wenn ich die Maustaste auf dem Desktop oder so loslasse passiert nichts.
Private Sub ListBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDown
If e.Clicks = 1 And e.Button = Windows.Forms.MouseButtons.Left Then
ListBox1.DoDragDrop(New DataObject(DataFormats.FileDrop, vz & "\" & ListBox1.SelectedItem), DragDropEffects.Copy)
End If
End Sub

Wie muss ich das anstellen, dass ich Dateien auch so rauskopieren kann?

Monger
2008-05-15, 14:51:35
Jetzt mal so ganz grundsätzlich gesprochen, funktioniert Anwendungsübergreifendes Drag & Drop genauso wie Copy & Paste - nämlich über die Zwischenablage.

Und die Zwischenablage ist eine Wissenschaft für sich. Im Prinzip lagerst du dort Daten ein, und die Zielanwendung versucht die Datencontainer sinnvoll zu interpretieren. Für eine Kopieraktion braucht also der Desktop einen Datencontainer mit einem bestimmten Inhalt...

Wenn du dazu ein passendes Tutorial findest, würde ich das auch gerne wissen! Meine letzten Experimente mit der Zwischenablage waren nicht so glücklich! ;)

Iceman346
2008-05-16, 10:10:11
Hab in einem anderen Forum Hilfe bekommen, nun klappts. Mit der Zwischenablage muss man erfreulicherweise nicht rumfrickeln.

Hier der Code, vielleicht kanns ja wer gebrauchen:

Private Sub ListView_ItemDrag(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemDragEventArgs) Handles ListView1.ItemDrag
Dim liste(ListView1.SelectedItems.Count - 1) As String
Dim i As Integer = 0
For Each item As ListViewItem In ListView1.SelectedItems
liste(i) = vz & item.Text
i = i + 1
Next
Dim obj As New DataObject(DataFormats.FileDrop, liste)
DoDragDrop(obj, DragDropEffects.Copy)
End Sub
Darauf achten muss man, dass man in der Liste den vollen Pfad der Datei drin stehen hat und es muss wirklich nen Array sein was man da dem DataObject übergibt. Stellt man nur nen einzelnen String rein funktioniert es aus unerfindlichen Gründen nicht.