DragDrop auf den Desktop

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von StormySunshine.

    DragDrop auf den Desktop

    Moin,

    ich habe schon diverse Tutorials zum Drag'n'Drop vorgang gefunden, Sachen in mein Control kann ich auch schon reinziehen. Jetzt möchte ich allerdings das Element auf meinen Desktop ziehen, dazu habe ich noch kein Tut gefunden. kann mir jemand von euch weiterhelfen?

    Gruß,
    Julian

    Gelöschter Benutzer schrieb:

    auf meinen Desktop ziehen
    Den, den Dein Betriebssystem zur Verfügung stellt ==> nutze die Funktionalität des Betriebssystems
    oder
    hast Du Dir einen eigenen geschrieben ==> erweitere das DragDrop-Event.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Guten Morgen ;)

    Also ich habe mir einfach mal eine ListBox genommen und im MouseDown-Event Folgendes probiert:

    VB.NET-Quellcode

    1. Private Sub ListBox1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDown
    2. Dim fileList As New Collections.Specialized.StringCollection
    3. fileList.Add(ListBox1.SelectedItem.ToString)
    4. Dim dataObj As New DataObject
    5. dataObj.SetFileDropList(fileList)
    6. ListBox1.DoDragDrop(dataObj, DragDropEffects.Copy)
    7. End Sub

    Funktioniert wunderbar. :thumbsup:
    ok, das funktioniert, kann ich auch eine eigene datei schreiben?
    bsp:
    1. ich Ziehe eine Textdatei auf mein Control, der Text wird ausgelesen und in einer Variable gespeichert
    2. Ich modifiziere den Text in der Variable
    3. Ich Ziehe den Text auf den Desktop und es wird mir eine Datei geschrieben?


    Gruß,
    Julian
    Klar... ;)

    Dann einfach

    VB.NET-Quellcode

    1. 'DragDrop
    2. Dim Files As String() = CType(e.Data.GetData(DataFormats.FileDrop), String())
    3. For Each FileName As String In Files
    4. ListBox1.Items.Add(FileName)
    5. Next
    6. 'DragEnter
    7. If e.Data.GetDataPresent(DataFormats.FileDrop) Then
    8. e.Effect = DragDropEffects.Copy
    9. End If


    Nun kannst Du zum Beispiel eine mp3-Datei auf die ListBox ziehen und Dir wird der Pfad angegeben. :thumbsup:

    Gelöschter Benutzer schrieb:

    Ich Ziehe den Text auf den Desktop und es wird mir eine Datei geschrieben?
    Ein Drag-Vorgang aus deiner Anwendung heraus macht nichts anneres, als der (deiner Anwendung unbekannten) ZielAnwendung ein DataObject und einen AllowedEffect zu übergeben.
    Ist die ZielAnwendung der Desktop, hast du zb. AllowedEffect.Copy eingestellt, und eine FileDropList reingepackt, dann wissen wir zufällig, was der Desktop damit anfängt.

    Natürlich müssen die in der FileDropList aufgeführten Dateien auch vorhanden sein - dem Desktop kannst du keine zusätzlichen Kunststückchen beibringen.