Drag&Drop über Vb ins Dateisystem ?

  • VB.NET

Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von Planlos.

    Drag&Drop über Vb ins Dateisystem ?

    Hallo,

    ich würde gerne eine (oder mehrere) Datei(-en) in ein "Feld" meiner Anwendung ziehen
    und die Anwendung soll die Datei dann in einen vorgegebenen Dateipfad kopieren
    z.b. "\\xp01\test"


    ob das "Feld" nun eine leere Imgbox Textbox oder etwas anderes ist, spielt für mich dabei keine Rolle :)




    bisher hat mir google nur ergebnisse geliefert wie ich dateinamen herausbekomme oder eine Listbox als quasi zwischenablage verwende...


    kann mir jemand dabei helfen?


    Grüße Kevin

    Hey, und willkommen im Forum

    Wenn es am Kopieren der Dateien liegt, dann schaue mal hier: MSDN, Mit CopyTo sollte es funktionieren.

    Gruß
    Youtube Info Library 2013 jetzt im Showroom.
    Also ich habe halt diesen code schnipsel gefunden



    Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ListBox1.AllowDrop = True
    End Sub

    Private Sub ListBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox1.DragDrop
    If e.Data.GetDataPresent(DataFormats.FileDrop) Then
    Dim filePaths As String() = CType(e.Data.GetData(DataFormats.FileDrop), String())
    For Each s As String In filePaths
    ListBox1.Items.Add(s)
    Next s
    End If
    End Sub

    Private Sub ListBox1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox1.DragEnter
    If e.Data.GetDataPresent(DataFormats.FileDrop) Then
    e.Effect = DragDropEffects.Copy
    Else
    e.Effect = DragDropEffects.None
    End If
    End Sub
    End Class

    ich würde jetzt die ListBox1 gegen ein Label1 tauschen und "verstecken"
    Dann würde ich den Inhalt von label 1 als Quelle nehmen und nach z.B. "\\xp01\test" kopieren.


    Allerdings ist das mit sicherhet nicht der sauberste Weg und eben diesen würde ich gerne erfahren. ;)


    Grüße Kevin

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Planlos“ ()

    Kannst Du

    Planlos schrieb:

    diesen code schnipsel
    auch nicht ordentlich lesen?
    Bearbeite ihn bitte (Button Bearbeiten) oder füge den Quellcode im Tab Quellcode als C&P vom Studio direkt rein.
    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!
    Nutze bitte die Klasse FileInfo. Und irgendwelche Controls als Datenspeicher zu missbrauchen ist keine Lösung. Trenne Daten von Deiner GUI.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Schau Dir halt mal die Klasse FileInfo an. Anstatt die gedroppten Pfadangaben in eine ListBox zu stecken, erzeug Dir halt anstatt für jeden Pfad ein FileInfo und kopiere. Ist wirklich nicht so schwer^^
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Ich schon wieder =)
    verzweifle hier langsam

    Also ich möchte das es die einträge aus ListBox1 entnimmt,
    dann kopiert und danach die ListBox1 leert

    Wie rufe ich hierzu die einzelnen Zeilen ab?
    und wie kann ich kopieren wenn ich den Dateinamen nicht habe, den brauche ich ja für einen Kopierbefehl oder?
    (aber der kann ja immer variieren)


    VB.NET-Quellcode

    1. Private Sub ListBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox1.DragDrop
    2. If e.Data.GetDataPresent(DataFormats.FileDrop) Then
    3. Dim DroppedFiles As String() = _
    4. e.Data.GetData(DataFormats.FileDrop)
    5. For i As Int32 = 0 To DroppedFiles.Length - 1
    6. ListBox1.Text = DroppedFiles(i)
    7. Next
    8. End If
    9. My.Computer.FileSystem.CopyFile(ListBox1.Text, "\\xp01\wawi\Daten\Test\")
    10. ListBox1.Text = ""
    11. End Sub


    grüße Kevin =)
    Was macht dieser Code:

    Planlos schrieb:

    VB.NET-Quellcode

    1. For i As Int32 = 0 To DroppedFiles.Length - 1
    2. ListBox1.Text = DroppedFiles(i)
    3. Next
    ?
    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!
    Warum denn jetzt wieder mit der ListBox?

    VB.NET-Quellcode

    1. Private Sub Form1_DragDrop(sender As Object, e As System.Windows.Forms.DragEventArgs) Handles Me.DragDrop
    2. If e.Data.GetDataPresent(DataFormats.FileDrop) Then
    3. Dim droppedFiles = DirectCast(e.Data.GetData(DataFormats.FileDrop), String()).Select(Function(item) New FileInfo(item))
    4. For Each f In droppedFiles
    5. f.CopyTo(Path.Combine("<Zielordner>", f.Name))
    6. Next
    7. End If
    8. End Sub
    Also ich erhalte folgende Fehler

    Fehler 3 "Path" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden.
    Fehler 2 Der Typ "FileInfo" ist nicht definiert.

    für beide schlägt basic vor FileIO zu importieren
    was auch den 3. fehler behebt (siehe am Ende des Post)

    Allow Drop Steht auf True
    aber ich kann trotzdem nichts in die Fom Dropen was mache ich falsch?





    Fehler 1 Fehler bei der Überladungsauflösung, da keine zugreifbare "Select" mit diesen Argumenten aufgerufen werden kann:
    In "System.Linq.Enumerable" definierte Erweiterungsmethode "Public Function Select(Of TResult)(selector As System.Func(Of String, Integer, TResult)) As System.Collections.Generic.IEnumerable(Of TResult)": Die Signatur der geschachtelten Funktion ist nicht mit dem Delegaten "System.Func(Of String, Integer, TResult)" kompatibel.
    In "System.Linq.Enumerable" definierte Erweiterungsmethode "Public Function Select(Of TResult)(selector As System.Func(Of String, Integer, TResult)) As System.Collections.Generic.IEnumerable(Of TResult)": Die Datentypen der Typparameter können nicht von diesen Argumenten abgeleitet werden. Sie können diesen Fehler möglicherweise beheben, indem Sie die Datentypen explizit angeben.
    In "System.Linq.Enumerable" definierte Erweiterungsmethode "Public Function Select(Of TResult)(selector As System.Func(Of String, TResult)) As System.Collections.Generic.IEnumerable(Of TResult)": Der Typ "FileInfo" ist nicht definiert.
    In "System.Linq.Enumerable" definierte Erweiterungsmethode "Public Function Select(Of TResult)(selector As System.Func(Of String, TResult)) As System.Collections.Generic.IEnumerable(Of TResult)": Die Datentypen der Typparameter können nicht von diesen Argumenten abgeleitet werden. Sie können diesen Fehler möglicherweise beheben, indem Sie die Datentypen explizit angeben. C:\Users\hph-testsystem\Documents\Visual Studio 2010\Projects\Testapp\Testapp\Form3.vb 5 32 Testapp

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