Drag and Drop im Treeview-Steuerelement

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

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-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 (siehe Bild 1) oder per Code:

objTreeview.OLEDragMode = _    ccOLEDragAutomatic
objTreeview.OLEDropMode = ccOLEDropManual

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.

Bild 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.

Bild 2: Anlegen von Ereignisprozeduren im VBA-Codefenster

Auf diese Weise sind die nachfolgend benötigten drei Prozeduren schnell erstellt (siehe Bild 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.

    Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

    den kompletten Artikel im PDF-Format mit Beispieldatenbank

    diesen und alle anderen Artikel mit dem Jahresabo

    Schreibe einen Kommentar