Drag & Drop von Dateien aus einer Anwendung (Listview) in das Windows-Explorer-Dateisystem

    • VB.NET
    • .NET (FX) 4.5–4.8

    Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

      Drag & Drop von Dateien aus einer Anwendung (Listview) in das Windows-Explorer-Dateisystem

      Hallo Leute,

      da ich heute selbst lange danach gegoogelt habe und die gefundenen Codes sehr umfangreich waren, habe ich für meine Zwecke einen überschaubaren Code geschrieben.
      Ihr könnt diesen sicher auf Eure eigenen Bedürfnisse anpassen. Ich habe ihn extrem vereinfacht.

      Ein Element wird aus einem Listview, welches eine Datei repräsentiert wird per Drag & Drop auf (z.B.) den Desktop geschoben.

      VB.NET-Quellcode

      1. Private Sub ListView_Demo_ItemDrag(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemDragEventArgs) Handles ListView_Demo.ItemDrag
      2. '// hier wird das Listview item ausgelesen, in dem ein Dateiname steht
      3. '// der Einfachheit halber steht im Listview Element der komplette Dateipfad (z.B. c:/Anwendung/Daten/meinedatei.jpg)
      4. Dim DragoutFilename = ListView_Demo.SelectedItems(0).Text.ToString
      5. '// nur wenn die Datei tatsächlich existiert
      6. If File.Exists(DragoutFilename) Then
      7. '// Datei in den Temp-Ordner kopieren und diese angeben (sonst wird die original Datei VERSCHOBEN)
      8. Dim Tempfile As String = Path.Combine(Path.GetTempPath, "NameDerZieldatei.jpg")
      9. File.Copy(DragoutFilename, Tempfile)
      10. '// DataObjekt für die Übergabe mit dem Dateinamen befüllen
      11. '// f() = ist eine Listof - da können auch mehrere Dateien übergeben werden
      12. Dim eDat As New DataObject
      13. Dim f() As String = {Tempfile}
      14. eDat.SetData(DataFormats.FileDrop, f)
      15. '// Drag-Effekt anzeigen
      16. ListView_Demo.DoDragDrop(eDat, DragDropEffects.Move Or DragDropEffects.Copy)
      17. End If
      18. End Sub


      Wichtig: Ihr müsst noch programmtechnisch verhindern, dass die Datei im eigenen Listview fallen gelassen wird und dann "auf sich selbst dropt".
      Ich hoffe mein Code ist ok.
      Liebe Grüße
      Roland Berghöfer

      Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
      Siehe auch Diesen Beitrag im anderen DragDrop-Tut - dort speziell die #Region "send DragDrop" ab Zeile#40.
      Drag&Drop kann man ja in 3 Bereiche unterteilen:
      1. Aus eigene Anwendung draggen auf Fremd-Anwendung
        Darauf geht speziell der verlinkte Post ein
      2. Drags aus FremdAnwendungen empfangen
      3. Draggen innerhalb der eigenen Anwendung
      Zu 2. und 3. gibts im verlinkten Tut auch entsprechende Posts.
      Dieses Tut hier beschäftigt sich mit 1., und davon wiederum speziell mit dem Draggen aus einem ListView heraus.
      ListView (und Treeview auch) hat - wie hier in post#1 zu sehen - für den Drag-Start ein besonderes Event: ItemDrag.
      Das erspart einem den etwas umständlichen Code, der ansonsten erforderlich ist, um die "Drag-Start-Mausgeste" richtig zu identifizieren.
      Hier etwas fragwürdig, dass die Informationen, die das ItemDragEventArgs liefert, hier gar nicht genutzt werden.
      Aber möglicherweise wäre das hier konkret auch gar keine Verbesserung.

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „ErfinderDesRades“ ()