Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 1/2006.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Erfahren Sie, wie Sie Elemente im Treeview mit Drag and Drop verschieben.

Techniken

Formulare, Treeview-Steuerelement, VBA

Voraussetzungen

Access 2002 und höher oder Access 97/2000 und Developer Edition oder Visual Studio 6.0

Beispieldateien

Treeview2002.mdb

Drag and Drop im Treeview-Steuerelement

André Minhorst, Duisburg

Das Treeview-Steuerelement lässt sich sehr gut zur Darstellung von hierarchischen Daten verwenden. Im Gegensatz zu den üblichen Access-Steuerelementen unterstützt es auch Drag and Drop. Wie das im Detail funktioniert, erfahren Sie im vorliegenden Beitrag.

Drag and Drop aktivieren

Drag and Drop-Operationen erfordern je nach Anwendungsfall einige Zeilen Code. Voraussetzung ist, dass Sie die Einstellung für die Eigenschaften OLEDragMode auf ccOLEDragAutomatic und OLEDropMode auf ccOLEDropManual festlegen. Das können Sie im Eigenschaftsdialog des Treeview-Steuerelements erledigen (s. Abb. 1) oder per Code:

objTreeview.OLEDragMode = _
    ccOLEDragAutomatic

objTreeview.OLEDropMode = ccOLEDropManual

Kein Drag and Drop ohne VBA

Außerdem sind einige Ereignisprozeduren mit Leben zu füllen. Diese lassen sich nicht wie bei den üblichen Access-Steuerelementen über das Eigenschaftsfenster anlegen, sondern müssen direkt im VBA-Editor erstellt werden.

Abb. 1: Eigenschaften eines Treeview-Steuerelements

Dazu deklarieren Sie zunächst eine Objektvariable für das Treeview-Steuerelement, das Sie in der Beim Laden-Ereignisprozedur des Formulars zuweisen (s. Quellcode 1).

Quellcode 1: Deklarieren und Zuweisen des Treeview-Objekts

Dim objTreeview As MSComctlLib.Treeview

Private Sub Form_Load()

    Set objTreeview = Me.ctlTreeview.Object

End Sub

Allein durch die Deklarationszeile können Sie innerhalb der Prozeduren per IntelliSense auf die einzelnen Eigenschaften und Methoden des Treeview-Steuerelements zugreifen und dessen Ereignisprozeduren mit den beiden Kombinationsfeldern im Kopf des VBA-Codefensters anlegen.

Abb. 2: Anlegen von Ereignisprozeduren im VBA-Codefenster

Auf diese Weise sind die nachfolgend benötigten drei Prozeduren schnell erstellt (s. Abb. 2). Das Ereignis OLEStartDrag wird ausgelöst, wenn Sie den Mauszeiger auf einem Eintrag positionieren, die linke Maustaste gedrückt halten und den Mauszeiger dabei bewegen.

Das Ereignis OLEDragOver wird nach dem Ereignis OLEStartDrag in kurzen Abständen ausgelöst - es könnte eigentlich OLEDragMouseMove heißen -, bis Sie die Maustaste loslassen. Dies wiederum ruft das Ereignis OLEDragDrop auf den Plan.

Damit hätten Sie das Werkzeug beisammen - mit Ausnahme einiger nützlicher Eigenschaften des Treeview-Steuerelements:

  • HitTest(x,y): Liefert einen Verweis auf den Knoten mit den Koordinaten x und y.
  • SelectedItem: Legt den markierten Knoten fest oder liest diesen aus.
  • DropHighlight: Markiert den Knoten, über dem sich der Mauszeiger bei einer Drag and Drop-Operation befindet, sofern dies nicht der Ausgangsknoten ist.
  • Sobald Access den Start einer Drag and Drop-Operation erkennt, soll kein Knoten mehr markiert sein. Das erledigt der Einzeiler aus Quellcode 2.

    Aber warum soll die Markierung des aktuell ausgewählten Knotens aufgehoben werden? Ganz einfach: Dieser Knoten ist nicht unbedingt mit dem identisch, der per Drag and Drop verschoben werden soll.

    Dementsprechend wird in der während des Drag and Drop-Vorgangs immer wieder ausgeführten Ereignisprozedur OLEDragOver zunächst der zu verschiebende Eintrag über die Eigenschaft SelectedItem als aktueller Eintrag markiert.

    Dies passiert nur einmal direkt nach dem Starten des Drag and Drop-Vorgangs, nachdem die OLEStartDrag-Prozedur den vorherigen aktiven Knoten abgewählt hat.

    Bei jedem Aufruf der OLEDragOver-Prozedur passiert allerdings Folgendes: Mit der Eigenschaft DropHighlight wird der Knoten, über dem sich der Mauszeiger derzeit befindet, markiert, um ihn als Ziel der Operation zu kennzeichnen.

    Das große Finish folgt dann in der Ereignisprozedur OLEDragDrop. Diese wird beim Loslassen der Maustaste ausgelöst und muss dafür sorgen, dass der Knoten an die neue Stelle verschoben wird.

    Aber nicht nur das: Das Abbild der Daten im Treeview-Steuerelement und die in den Tabellen befindlichen Daten werden natürlich nicht automatisch synchronisiert.

    Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

    Sind Sie Abonnent?Jetzt einloggen ...
     

    Kompletten Artikel lesen?

    Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

    E-Mail:

    © 2003-2015 André Minhorst Alle Rechte vorbehalten.