Drag and Drop (Datei verschieben) und Textbox Text mit anderen Dateiformat abspeichern.

  • VB.NET

Es gibt 36 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Man, machs doch nicht so kompliziert. Du hast den Dateipfad, also kannst Du die Datei doch auch kopieren.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private _outputPath As String = Application.StartupPath
    3. Private Sub Panel1_DragEnter(sender As Object, e As DragEventArgs) Handles Panel1.DragEnter
    4. If e.Data.GetDataPresent(DataFormats.FileDrop) Then
    5. e.Effect = DragDropEffects.All
    6. End If
    7. End Sub
    8. Private Sub Panel1_DragDrop(sender As Object, e As DragEventArgs) Handles Panel1.DragDrop
    9. Dim droppedFiles() As String = DirectCast(e.Data.GetData(DataFormats.FileDrop), String())
    10. For Each file As String In droppedFiles
    11. Dim fI As New IO.FileInfo(file)
    12. Dim target As String = IO.Path.Combine(_outputPath, fI.Name)
    13. If Not IO.File.Exists(target) Then
    14. fI.CopyTo(target)
    15. Else
    16. MessageBox.Show("Diese Datei ist schon vorhanden")
    17. End If
    18. Next
    19. End Sub
    20. End Class


    Hast Du den Pfad, kannst Du mit der Datei alles machen.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Ich habe den Code jetzt eingefügt, allerdings kann ich nichts auf das Drop-Feld ziehen ... Es wird immer das "Geht nicht Zeichen" angezeigt.
    AllowDrop ist auf True.
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford

    SpaceyX schrieb:

    Zeig mal Deinen Code.


    VB.NET-Quellcode

    1. Private Sub Panel1_DragDrop(sender As Object, e As DragEventArgs) Handles Panel1.DragDrop
    2. Dim droppedFiles() As String = DirectCast(e.Data.GetData(DataFormats.FileDrop), String())
    3. Dim _outputPath As String = Application.StartupPath
    4. For Each file As String In droppedFiles
    5. Dim fI As New IO.FileInfo(file)
    6. Dim target As String = IO.Path.Combine(_outputPath, fI.Name)
    7. If Not IO.File.Exists(target) Then
    8. fI.CopyTo(target)
    9. Else
    10. MessageBox.Show("Diese Datei ist schon vorhanden")
    11. End If
    12. Next
    13. End Sub
    14. Private Sub Panel1_DragEnter(sender As Object, e As DragEventArgs) Handles Panel1.DragEnter
    15. If e.Data.GetDataPresent(DataFormats.FileDrop) Then
    16. e.Effect = DragDropEffects.All
    17. End If
    18. End Sub


    Ich habe wirklich ALLES auf AllowDrop = True gestellt.
    Tut mir leid das ich so lange zum Antworten gebraucht habe, Windows Probleme.
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    Ich habe dann doch das Panel genommen, vorher hatte ich da ne PictureBox, die habe ich aber entfernt.
    Sieht alles beide sowieso gleich aus, wenn man den Style ändert.

    Das Panel ist auch auf AllowDrop = True
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    Hi
    DragDropEffects sind Flags. All ist dazu da, dem Drag/Drop-Ziel die Möglichkeit offen zu lassen, als Response an den Sender eine der DragDropEffects zu setzen. Bei mehreren ist es dann wahrscheinlich nicht klar, welches der Flags denn der letztendlich ausgeführten Aktion entspricht. Wär' ja fatal, wenn du Move setzt und dann die Datei einfach im nirgendwo verschwindet, weil du eig. Link gewählt hattest.
    Eine Überprüfung auf die jeweiligen Flags wär vmtl. sinnvoll:

    VB.NET-Quellcode

    1. e.Effect = e.AllowedEffect And DragDropEffects.Link

    bzw. halt statt Link Copy.

    Gruß
    ~blaze~

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()

    ~blaze~ schrieb:

    All ist wahrscheinlich dazu da, dem Benutzer die Möglichkeit offen zu lassen, als Response an den Sender eine der DragDropEffects zu setzen.
    Ja, habich auch gedacht - funzt aber nicht.
    Dassis ja genau meine Erfahrung:

    VB.NET-Quellcode

    1. me.DoDragDrop(myDataObject, DragdropEffects.All)'führt zu keinem Drag-Erfolg
    2. me.DoDragDrop(myDataObject, DragdropEffects.Copy Or DragdropEffects.Move Or DragdropEffects.Link)'verhält sich erwartungsgemäß
    @ErfinderDesRades

    Editiert: Falsch verstanden.

    @~blaze~

    "AllowedEffects" ist kein Member von "System.Windows.Forms.DragEventArgs".
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Vultrax“ ()

    Ich finde es immer noch merkwürdig das obwohl alles auf AllowDrop steht, Ich nichts auf die Form ziehen kann, weil das "Funktioniert nicht Zeichen" auftaucht.
    Zeichen: go-windows.de/wp-content/uploads/2010/01/verbot1.gif

    Ich habe ein neues Projekt erstellt und auch auf der neuen Form mit AllowDrop geht es nicht, kein Zeichen das ich etwas darauf ziehen kann.
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    Beachte neben dem Beitrag von ErfinderDesRades auch, dass es nicht gehen sollte, als normaler Benutzer an Anwendungen mit Administratorrechten Windows Messages zu schicken - ich denk zumindest mal, dass das der Grund ist, warum D&D nicht geht, da das ebenfalls darauf basieren sollte. Umgekehrt sollt's ebenfalls nicht gehen, da eben eine Antwort erwartet wird.

    Gruß
    ~blaze~
    tja, DDE.All wars wohl nicht, weil in DragDropSample verwende ichs ja auch. Also ich keine Ahnung, was beim TE da anners ist - vlt. die Rechte, ja.
    Halte ich für nicht soo wahrscheinlich, weils ist eher untypisch, dass jmd. 2 Anwendungen mit unterschiedlichen Rechten aufm Monitor hat.