Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin

Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB.NET] Tutorials
Autor
Nachricht
r4z3r
Poster
Poster

Anmeldedatum: 16.04.2008
Beiträge: 173

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:

Visual Basic: [code]If e.Data.GetDataPresent(DataFormats.FileDrop) Then[/code]


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.

Mit

Visual Basic: [code]e.Effect = DragDropEffects.Copy[/code]

fügt ihr eurem Cursor ein '+' hinzu, was typisch für eine Drag&Drop Aktion ist.

Visual Basic: [code]e.Effect = DragDropEffects.None[/code]


fügt dem Cursor keinerlei Effekte hinzu.



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 Wink

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!

MfG
_________________
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB.NET] Tutorials

Tags: visual basic, drag, drop

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Wichtig: Filebrowser z.B. für ein RAT 2118 13.01.2008, 11:14
Keine neuen Beiträge Wie kann ich mich bei euch anmelden?? 796 20.05.2002, 00:28
Keine neuen Beiträge "Zurück-Funktion" mit Listview und z.B. DirView 734 17.04.2008, 13:30
Keine neuen Beiträge Fenster auslesen z.b von icq oder msn wer online kommt 1224 11.02.2008, 16:46
Keine neuen Beiträge Eine kleine Frage an euch.. 906 30.09.2007, 08:57
 



[ Time: 0.1565s ][ Queries: 81 (0.0428s) ][ GZIP on - Debug on ]