Rubrik: Maus & Tastatur · Drag & Drop | VB-Versionen: VB5, VB6 | 27.08.03 |
FileListBox: Kopieren/Verschieben von Dateien Dieses Beispiel zeigt, wie sich per Drag & Drope Dateien aus einer FileListBox in eine zweite FileListBox kopieren oder auch verschieben lassen. | ||
Autor: Dieter Otter | Bewertung: | Views: 22.289 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Immer wieder im Forum gefragt: "Wie kann ich Dateien aus einer einer FileListBox in eine zweite FileListBox verschieben oder auch kopieren?"
Die Antwort ist recht einfach, unterstützt die VB-FileListBox doch OLE Drag & Drop.
Private Sub Form_Load() ' File1 dient als Quelle File1.OLEDragMode = 1 ' File2 dient als Ziel File2.OLEDropMode = 1 End Sub
Werden nun eine oder mehrere Dateien aus File1 nach File2 gezogen, wird autom. das File2_OLEDragDrop-Ereignis ausgelöst:
Private Sub File2_OLEDragDrop(Data As DataObject, Effect As Long, _ Button As Integer, Shift As Integer, X As Single, Y As Single) ' Datei kopieren / verschieben Dim nPos As Integer Dim sFile As String Dim i As Integer Dim sPath As String If Data.Files.Count > 0 Then For i = 1 To Data.Files.Count sFile = Data.Files(i) nPos = InStrRev(sFile, "\") sFile = Mid$(sFile, nPos + 1) ' Zielpfad sPath = File2.Path & IIf(Right$(File2.Path, 1) <> "\", "\", "") ' Kopieren FileCopy Data.Files(i), sPath & sFile ' Falls verschieben -> Originaldatei jetzt löschen Kill Data.Files(i) Next i ' Ziel-Dateiliste aktualisieren File2.Refresh ' Falls verschieben, Quell-Dateiliste aktualisieren File1.Refresh End If End Sub
So, und nun gestalten wir das Ganze noch ein wenig ansprechender, indem wir ein PopUp-Menü zur Auswahl der Aktion einblenden. Erstellen Sie hierzu mit dem VB-Menüeditor folgendes Menü:
PopUp (Name: MenuPopUp, Visible: False) ...&Kopieren (Name: mnuPopUp, Index: 0) ...&Verschieben (Name: mnuPopUp, Index: 0)
Beim Ziehen der Datei auf File2 soll nun zunächst ein PopUp-Menü angezeigt werden. Je nach Auswahl sollen die Datei dann entweder kopiert oder verschoben werden.
Fügen Sie in den Allgemein-Teil der Form folgende Deklaration:
Dim oFiles As DataObject
Im File2_OLEDragDrop-Ereignis merken wir uns die Dateien und zeigen das PopUp-Menü an:
Private Sub File2_OLEDragDrop(Data As DataObject, Effect As Long, _ Button As Integer, Shift As Integer, X As Single, Y As Single) If Data.Files.Count > 0 Then Set oFiles = Data ' PopUp-Menü anzeigen PopupMenu MenuPopUp End If End Sub
Erst bei Auswahl eines Befehls aus dem PopUp-Menü wird die entsprechende Aktion ausgeführt:
Private Sub mnuPopUp_Click(Index As Integer) ' Dateien kopieren / verschieben Dim nPos As Integer Dim sFile As String Dim i As Integer Dim sPath As String With oFiles For i = 1 To .Files.Count sFile = .Files(i) nPos = InStrRev(sFile, "\") sFile = Mid$(sFile, nPos + 1) ' Zielpfad sPath = File2.Path & IIf(Right$(File2.Path, 1) <> "\", "\", "") ' Kopieren FileCopy .Files(i), sPath & sFile ' Falls verschieben -> Originaldatei jetzt löschen If Index = 1 Then Kill .Files(i) Next i End With ' Ziel-Dateiliste aktualisieren File2.Refresh ' Falls verschieben, Quell-Dateiliste aktualisieren If Index = 1 Then File1.Refresh End Sub