Ich stand gerade vor der Aufgabe, in einem Projekt eine Listbox zu nutzen, in die der User per DragDrop ziehen kann was er gerade will. Es sollten aber nur bestimmte Dateien eingetragen werden. Dazu soll es möglich sein, Dateien oder Ordner (evtl. Unterordner, oder beides gemeinsam) zu dropen. Aus all den Daten die so gedropt werden können, sollen nun nur spezielle Dateien hinzugefügt werden. So kann man z.b. alle Dateien und Ordner eines Laufwerks einfach auf eine Listbox ziehen und bekommt alle ".mp3" Dateien eingetragen. Bevor nun der Quellcode meiner Lösung kommt, sei nochmal erwähnt, dass dies nur ein Beispiel für eine Listbox ist. Der Code in die entsrpechenden Events eines anderen Elements (z.b. Listview) kopiert, funktioniert dort genauso. Zum testen benötigen Sie eine Form und darauf eine Listbox1. Imports System.Drawing.Drawing2D Public Class Form1 ' welche Dateien sollen alles hinzugefügt werden. ' Der Filter bezieht sich hier auf die Dateiendung. ' {""} als Filter würde so z.b alle Dateien zulassen Private Filter() As String = {"mp3", "flac"} ' Für gedropte Ordner, kann hier noch gesagt werden, ' ob alle Unterordner auch gedropt werden sollen Private SearchSubs As Boolean = True ' AllowDrop muss für das Steuerelement immer zugelassen sein, ' damit Drag & Drop überhaupt funktioniert. ' Dies kann natürlich auch bereits im Designer erfolgen. ' Dann wäre dieser Aufruf nicht mehr erforderlich. Private Sub ListBox1_HandleCreated(ByVal sender As Object, ByVal e As EventArgs) _ Handles ListBox1.HandleCreated ListBox1.AllowDrop = True End Sub ' Jetzt wird nur der FileDropEffects definiert. In unserem Fall Copy Private Sub ListBox1_DragEnter(ByVal sender As Object, ByVal e As DragEventArgs) _ Handles ListBox1.DragEnter If (e.Data.GetDataPresent(DataFormats.FileDrop)) Then e.Effect = DragDropEffects.Copy End If End Sub ' Hier werden nun die gedropten Elemente ausgewertet Private Sub ListBox1_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs) _ Handles ListBox1.DragDrop ' Array für alle gedropten Daten Dim link() As String = Nothing ' Daten zum Array hinzufügen If e.Data.GetDataPresent(DataFormats.FileDrop) Then link = e.Data.GetData(DataFormats.FileDrop) End If ' wenn Daten ins Array geschrieben wurden If Not IsNothing(link) Then ' Schleife über alle Daten For Each s As String In link ' wenn der Eintrag ein Ordner ist If My.Computer.FileSystem.DirectoryExists(s) Then Dim files As ReadOnlyCollection(Of String) ' Hier kommt jetzt unser "SearchSubs" zum Einsatz If SearchSubs = True Then files = My.Computer.FileSystem.GetFiles(s, FileIO.SearchOption.SearchAllSubDirectories) Else files = My.Computer.FileSystem.GetFiles(s, FileIO.SearchOption.SearchTopLevelOnly) End If ' jetzt werden alle gefillterten Daten weitergeleitet For Each s2 As String In files DragDropAdd(s2) Next Else ' wenn es kein Ordner war, kann direckt weitergeleitet werden DragDropAdd(s) End If Next End If End Sub ' Hier erfolgt jetzt das endgültige hinzufügen zu Steuerelement Private Sub DragDropAdd(ByVal Data As String) ' alle eingetragenen Filter durchlaufen For Each f As String In Filter ' Hier wird die Dateiendung mit dem Filter verglichen If Mid(Data, (Data.Length - f.Length) + 1) = f Then ' in diesem Beispiel werden die Daten nun in die Listbox geschrieben ' da der obige Code (Inhalt der Events) ja in allen DragDrop tauglichen ' Steuerelementen funktioniert, muß hier darauf geachtet werden, ' wie die Daten dem jeweiligen Steuerelemnt hinzugefügt werden. ListBox1.Items.Add(Data) End If Next End Sub End Class Dieser Tipp wurde bereits 10.738 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats November 2024 Dieter Otter WAVE-Dateien aufnehmen Ein Code-Ausschnitt, mit dem sich WAVE-Dateien in verschiedenen Aufnahmequalitäten aufnehmen lassen. TOP! Unser Nr. 1 Neu! sevDataGrid 3.0 Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |