Drag&Drop von Dateien (aus Explorer/Desktop) in Form

  • VB.NET

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von Memo.

    Drag&Drop von Dateien (aus Explorer/Desktop) in Form

    Hallo Leute!

    Würde gern wissen, wie ich Dateien vom Explorer und Desktop in meine Form ziehen kann.
    Wollte eine Sortier-Anwendung schreiben, in die ich meine Dateien ziehe und dann automatisch kopieren lasse (nach Dateiendung).

    Problem: Ich habe keine Ahnung, wie ich das mit dem Drag&Drop realisiere!
    -> Zwar ist das Netz voll mit Drag&Drop-Anleitungen und -Fragen, aber leider immer nur im Zusammenhang mit ListBoxen! Und dann auch nur auf die Form beschränkt!

    Es gibt ein paar wenige Threads im Netz mit dem selben Vorhaben wie das meine, aber leider wird immer auf das Drag&Drop in FORMEN mit LISTBOXEN verwiesen - Nix da mit allgemeinen Lösungen.

    Hat jemand da eine Ahnung, wie ich das bewerkstelligen kann? Dass ich einfach (vielleicht ja in einen Bereich) auf die Form eine Datei ziehe aus dem Arbeitsplatz und mir dann einfach der Dateiname zurückgegeben wird (Ausgabe mit Messagebox.show(name))?

    *verzweifel*

    MfG,
    X-Zat / Momo
    Hab den Code so übernommen, im Designer das "AllowDrop" der Listbox auf "True" und die Handles-Klauseln im Code hinzugefügt.

    Aber leider läuft da gar nichts! Ich bekomme nur diesen schwarzen durchgestrichenen Kreis als Cursor und nichts passiert sonst, wenn ich eine Datei auf die Form ziehen möchte...

    Habe Windows 7 Professional 64Bit, die Anwendung ist 32Bit und hat Administrator-Rechte bzw. wird durch das UAC nicht eingeschränkt...

    Es will einfach nicht funktionieren :(

    Trotzdem danke, dass du dir die Mühe gemacht hast! Aber hat vielleicht sonst noch jemand eine Idee wie ich das bewerkstelligen kann?

    MfG,
    X-Zat / Momo

    //EDIT:

    Wenn ich das Projekt von deinem Link downloade, lade und kompilieren lasse funktioniert es auch nicht :( - Wenn ich aber die schon kompilierte EXE aus der Drop.Zip nehme, funktioniert das Drag&Drop prima...
    Versuch mal dies hier:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub RtfPad_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ActivePanel.DragEnter
    2. If (e.Data.GetDataPresent(DataFormats.FileDrop)) Then
    3. e.Effect = DragDropEffects.Copy
    4. Else
    5. e.Effect = DragDropEffects.None
    6. End If
    7. End Sub
    8. Private Sub RtfPad_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ActivePanel.DragDrop
    9. Try
    10. If e.Data.GetDataPresent(DataFormats.FileDrop) Then
    11. ' Liste der Filenamen bei Multi-Drop
    12. Dim FileList() As String = CType(e.Data.GetData(DataFormats.FileDrop), String())
    13. If FileList IsNot Nothing AndAlso FileList.Length > 0 Then
    14. ' hier Deinen File auslesen
    15. End If
    16. End If
    17. Catch ex As Exception
    18. MsgBox("Unexpected exception while Drop:" & vbLf & ex.Message)
    19. End Try
    20. e.Effect = DragDropEffects.None
    21. End Sub
    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!
    Nein, funktioniert leider auch nicht...

    Ich weiß nicht, warum das ganze nicht klappen will - Denn Anwendungen aus dem Netz mit Drag and Drop kann ich ganz normal ausführen, kompiliere ich aber die gleichen Programme auf meinem Rechner neu, so funktioniert das D&D nicht mehr -.-

    Hat irgendjemand eine Ahnung, wie ich diesen asozialen schwarzen-durchgestrichenen Kreis vom Drag and Drop von Dateien in meine Form loswerden kann?

    Danke im Voraus!

    MfG,
    X-Zat / Momo
    Ironie.an()

    Klar, ich bitte hier um Hilfe, damit ich Leuten die Zeit stehlen und bringe nicht die Kompetenz auf, C&P-Codes zum Laufen zu bringen.
    Anstatt das hier geschriebene zu Verstehen und nachzuvollziehen, kopiere ich einfach und bekomme es ja trotzdem nicht hin.
    Natürlich mache ich das 24/7 so, helfe niemandem sonst und bin sowieso ein asozialer Zeitgenosse.

    Ironie.aus()

    Nein, ganz ehrlich: Nur weil ein paar (meiner Meinung nach asoziale) Anfänger und eigentlich nicht 100%ig interessierte Leute hier sinnlos nach Code fragen, MUSS ich ja zwingend dazugehören? Sorry, dass ich auch einmal frage, anstatt a) C&P-Code zu nutzen oder b) das Projekt in den Sand zu setzen.

    Und nein, ganz ehrlich: Keine der (leicht variierenden) Lösungen haben bei mir funktioniert... Es scheint auch an meinem VB zu liegen, da viele andere Posts von D&D handeln und dort problemlos gelöst wurden.

    MfG,
    X-Zat / Momo
    Hier mal wie ich den Drag und Drop vom Explorer auf eine Picturebox gelöst habe. Vielleicht hilfts ja und du kannst es für deine Zwecke umformen:

    VB.NET-Quellcode

    1. 'Drag and Drop für die Picturebox der Grafik
    2. Private Sub PictureBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles PictureBox1.DragDrop
    3. Dim fileNames = TryCast(e.Data.GetData(DataFormats.FileDrop), String())
    4. ' 1.Datei laden und der PictureBox zuweisen
    5. Using image As System.Drawing.Image = System.Drawing.Image.FromFile(fileNames(0))
    6. ' und der PictureBox zuweisen
    7. If Me.PictureBox1.Image IsNot Nothing Then
    8. Me.PictureBox1.Image.Dispose()
    9. Me.PictureBox1.Image = Nothing
    10. End If
    11. oBitmap = DirectCast(DirectCast(image, Bitmap).Clone(), Bitmap)
    12. End Using
    13. 'Bild setzen
    14. PictureBox1.Image = oBitmap
    15. End Sub
    16. 'Wenn ein Bild reingezogen wird
    17. Private Sub PictureBox1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles PictureBox1.DragEnter
    18. e.Effect = DragDropEffects.Copy
    19. End Sub
    Sorry, hab selbst C&P ausprobiert, funktioniert leider nicht :(

    Muss ich der Form vielleicht erst irgendwie klar machen, dass ich Files auf sie ziehen kann?
    Denn selbst ein Projekt, dessen mitgelieferter Debug sich problemlos ausführen ließ funktionierte bei erneutem Debug auf meinem Rechner nicht...

    Habe Visual Studio 2010 Ultimate mit Visual Basic 2010...
    Windows 7 Professional 64 Bit
    .Net Framework 4
    Du musst nur beim Control, das auf Drag&Drop reagieren soll, die Eigenschaft "AllowDrop" auf True stellen...

    Alternativ hier ausnahmsweise mal C&P, der funktioniert. Wenn er bei dir nicht funktioniert, hast du irgendwo nen Fehler gemacht, dann bräuchten wir den gesamten Codeblock, in dem der Fehler auftritt. Hier jedenfalls mein Code:

    VB.NET-Quellcode

    1. Private Sub ActionBarMain_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragDrop 'Statt Me natürlich das Control eintragen
    2. Try 'Warum der Try-Catch-Block hier ist, weiß ich nicht, das istn Überbleibsel aus nem uralten Projekt :D
    3. For Each item In CType(e.Data.GetData(DataFormats.FileDrop), Array) 'Für jede auf das Control gezogene Datei
    4. Trace.WriteLine(item) 'wird eine Zeile mit dem vollen Pfad ausgegeben.
    5. Next
    6. Catch ex As Exception
    7. MessageBox.Show("Es ist ein Fehler beim Drag/Drop-Vorgang aufgetreten.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    8. 'Selbsterklärend
    9. End Try
    10. End Sub
    11. Private Sub ActionBarMain_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragEnter 'Statt Me natürlich das Control eintragen
    12. If (e.Data.GetDataPresent(DataFormats.FileDrop)) Then 'Wenn ne Datei gezogen wird, und z.B. keine Tonspur aus Audacity etc
    13. e.Effect = DragDropEffects.Copy 'dann bereite das Control darauf vor, eine Datei gedroppt zu bekommen.
    14. End If
    15. End Sub
    Ich programmiere zwar erst seit März, denke aber eigentlich nicht, dass ich ein Vollidiot bin... Wenn ich mir anschaue, dass ich den verdammten D&D nicht hinbekomme, zweifle ich langsam...

    So hab ich's geschrieben:

    Spoiler anzeigen
    Public Class Form1

    Private Sub ListView1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListView1.DragDrop 'Statt Me natürlich das Control eintragen
    Try 'Warum der Try-Catch-Block hier ist, weiß ich nicht, das istn Überbleibsel aus nem uralten Projekt :D
    For Each item In CType(e.Data.GetData(DataFormats.FileDrop), Array) 'Für jede auf das Control gezogene Datei
    MessageBox.Show(item) 'wird eine Messagebox mit dem vollen Pfad ausgegeben.
    Next
    Catch ex As Exception
    MessageBox.Show("Es ist ein Fehler beim Drag/Drop-Vorgang aufgetreten.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    'Selbsterklärend
    End Try
    End Sub

    Private Sub ListView1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListView1.DragEnter 'Statt Me natürlich das Control eintragen
    If (e.Data.GetDataPresent(DataFormats.FileDrop)) Then 'Wenn ne Datei gezogen wird, und z.B. keine Tonspur aus Audacity etc
    e.Effect = DragDropEffects.Copy 'dann bereite das Control darauf vor, eine Datei gedroppt zu bekommen.
    End If
    End SubEnd Class


    Ja, Sorry, aber mein Google Chrome hats mit dem VB-Code, anders kann ich ihn leider net posten...

    Habe auf meiner Form ein Control ListView1 mit folgenden geänderten Eigenschaften:

    AllowDrop: True
    Dock: Fill

    Außerdem 3 Columns "Name", "Größe" und "Typ". Hier sollen später die reingezogenen Dateien ausgewertet und aufgelistet werden.

    Und mehr ist auf meiner ganzen Form und im ganzen Code nicht. Wie gesagt: Eigentlich wollte ich nur ein Demo-Projekt machen, um D&D zu lernen... Später wollte ich daraus einen Manager für meine Daten basteln, aber wenn der D&D nicht einmal funktioniert...

    Hoffe, ihr könnt mir helfen!

    //Edit:

    Habs gerade nochmal versucht, dieses Projekt hier (nach dem Herunterladen) auszuführen - Der D&D funktioniert prima!
    Dann lade ich die Projektmappe davon, konvertiere es zu 2010 und debugge es - Funktioniert nicht!
    Es wird wohl an meinem Rechner/.Net/VB liegen :(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „X-Zat“ ()

    Keine Sorge, die Reparatur dauert maximal 3 Werktage...

    Wie ich dir schon gesagt habe: Es gibt KEINE Fehlermeldung, sondern das Phänomen des durchgestrichenen Kreises bei JEDEM hier gezeigten Beispiel/jeder Lösung!

    Ich führe das auf meinen Rechner zurück, da korrekte Beispiel-Projekte bei mir zwar ausgeführt, jedoch nur fehlerhaft kompiliert werden.

    Und ohne Witz: Bei diesem komischen Problem mit D&D scheint nur noch eine verdammte Kristallkugel zu helfen, da es ja scheinbar bei jedem anderen funktioniert...

    MfG,
    X-Zat / Momo
    Hier die Screens... Sorry für die schlechte Quali, aber auf die Schnelle konnte ich kein sooo gutes Screenshot-Programm finden, dass mir auch den Cursor aufzeichnet.

    Nun verständlicher, worin mein Problem besteht?
    Bilder
    • Screen1.jpg

      503,75 kB, 1.280×1.024, 463 mal angesehen
    • Screen2.jpg

      489,44 kB, 1.280×1.024, 431 mal angesehen
    • Screen3.jpg

      619,25 kB, 1.280×1.024, 419 mal angesehen
    nimm doch mal DragDropEffect.Copy das klappt bei mir