Systemweites Drag&Drop in VB.NET Verfasst am: 16.07.2009, 11:41
Thema: Systemweites Drag & Drop in VB.NET
Hallo,
heute möchte ich Euch zeigen, wie Ihr ein systemweites Drag & Drop System mit VB.NET realisiert. In den meisten Tutorials/Sourcecodes findet ihr nur Drag & Drop zwischen zwei Listviews o.Ä., aber hier wird der Einsatz eines systemweiten Drag & Drop Systems besprochen. Damit könnt ihr z.B. Dateien aus dem Explorer in euer Programm ziehen. Damit das ganze funktioniert, müsst ihr erstmal Drag&Drop erlauben, dafür gibts die Property AllowDrop, die ihr einfach auf True stellen müsst.
1. Allgemeine Erklärung der benötigten Events
DragEnter:
Dieses Event wird aufgerufen, wenn ihr eine Datei auf euer jeweiliges Steuerelement zieht. Das wird z.B. benötigt, um den Cursor beim DragDrop Ereignis zu ändern oder um zu überprüfen, ob die Daten, die in das Programm gezogen werden, gültig sind.
DragDrop:
Der eigentliche Drag & Drop Sub. Hier wird der Inhalt der Datei(en) ausgelesen und verarbeitet.
2. 'DragEnter'
Wenn eine Datei in das Fenster gezogen wird, muss zunächst überprüft werden, ob die Daten auch gültig sind. Dafür eignet sich eine If-Anweisung, die das Format überprüft. Der Code dafür lautet:
GetDataPresent erwartet einen Parameter, der das Format der Daten enthält (hier: DataFormats.FileDrop). Zurückgegeben wird ein boolscher Wert, der angibt, ob das Format korrekt ist. Zusätzlich könnt ihr angeben, ob die Daten ins gewünschte Format geändert werden sollen. Das ist aber für dieses Tutorial nicht interessant.
Auf die If-Abfrage muss natürlich eine Aktion folgen. In diesem Teil wird dann je nach Ergebnis der Abfrage der Cursor zu einem Drag & Drop Icon oder, falls die Daten ungültig sind, wird kein Effekt benutzt.
Mehr braucht ihr nicht für den DragEnter Teil. Es ist natürlich möglich die Datenauswertung bereits im DragEnter Ereignis durchzuführen, dann würden die Daten jedoch bereits beim Streifen des Drag&Drop Objektes hinzugefügt werden. Das ist sehr unvorteilhaft
3. 'DragDrop'
Jetzt geht es ans Daten auswerten. Zuerst müsst ihr ein Array als String deklarieren. Ich benutze hier als Namen 'Dat' Wichtig hier bei ist es, dem Array keinen Index zu geben, da wir ein dynamisches Array benötigen.
Visual Basic: [code]Dim Dat() As String = e.Data.GetData(DataFormats.FileDrop)[/code]
Der Code nach dem '=' - Zeichen ist wohl der wichtigste der ganzen Sub. Wie der Name schon sagt, werden hier die Daten ausgelesen. Dafür haben wir ein Array deklariert, da der Benutzer auch mehrere Dateien auf einmal hinzufügen kann. In dem Array wird NICHT der Inhalt der Dateien gespeichert, sondern nur der Pfad zur Datei.
Mit den Daten in dem Array könnt ihr jetzt eine Auswertung starten. Falls ihr nicht wisst, wie man mit einem Array umgeht, könnt ihr das in anderen Tutorials erfahren.
Das wars eigentlich auch schon, viel Spaß beim testen!