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

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

Ihren XING-Kontakten zeigen

Diesen Beitrag Ihrem XING-Kontakten vorstellen

Diesen Beitrag auf Facebook teilen

Bisherige Kommentare:

Alle Kommentare ansehen oder Kommentar abgeben

Über den Autor:

André Minhorst

Bitte nutzen Sie das XING-Profil nicht
für Fragen zum Artikel, sondern nur für
den Kontaktaustausch beziehungsweise
Projekt- oder Supportanfragen.

Zusammenfassung

Erstellen Sie professionelle Benutzeroberflächen mit dem Treeview-Steuerelement.

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

Das Treeview-Steuerelement

André Minhorst, Duisburg

Access kommt mit einer Menge nützlicher Steuerelemente. Einige wichtige Controls sind jedoch den Besitzern von VB6 oder den Developer-Versionen von Office vorbehalten, da für deren Weitergabe eine Lizenz erforderlich ist. Dazu gehört auch das Treeview-Steuerelement. Oder doch nicht? Unbemerkt von weiten Teilen der Access-Entwicklergemeinde hat Microsoft die Bibliothek MSCOMCTL.OCX zum festen Bestandteil von Office gemacht. Ein Grund mehr, das Treeview-Steuerelement einmal genauer unter die Lupe zu nehmen ...

Lizenz oder nicht?

Entsprechend der Philosophie von Access im Unternehmen, möglichst keine Tools und Anwendungen in Beiträge einzubeziehen, die zusätzliche Kosten erzeugen (Betriebssystem und Access-Software ausgenommen), ist das Treeview-Steuerelement bisher etwas kurz gekommen. Seit Ewigkeiten herrscht nämlich die Legende, dass die Datei MSCOMCTL.OCX und damit das Treeview-Steuerelement nur in speziellen Entwickler-Paketen enthalten ist und nur mit einer entsprechenden Lizenz weitergegeben werden darf. Da diese Bibliothek aber seit Access 2002 fester Bestandteil der Office-Professional-Pakete ist, kann man die enthaltenen Steuerelemente sorglos in einer Anwendung verwenden, wenn auf dem Zielrechner auch die entsprechende Access-Version installiert ist.

Weitere Informationen zu den unterschiedlichen Versionen der Datei MSCOMCTL.OCX erhalten Sie unter http://support.microsoft.com/dllhelp/
?dlltype=file&l=55&alpha=mscomctl.ocx&S=1
&x=8&y=17.

Es gibt zwar einige Alternativen zum Treeview-Steuerelement von Microsoft, unter anderem solche, die entweder ebenfalls als .ocx-Datei kommen oder keine zusätzlichen Dateien erfordern und komplett auf API basieren, aber auch diese sind meist nicht kostenlos.

Was kann das Treeview-Steuerelement?

Bevor Sie das erste Treeview-Steuerelement in ein Formular einfügen, sollten Sie sich zunächst einmal einen Überblick über die Möglichkeiten des Treeview-Steuerelements verschaffen.

Das Hauptmerkmal ist natürlich, dass es hierarchisch angeordnete Daten anzeigen kann. Das bedeutet, dass sich damit beispielsweise eine Verzeichnisstruktur wie im Windows-Explorer nachbilden lässt.

Die wichtigste Rolle spielen dabei die so genannten Knoten (Node). Jedes Element im Treeview entspricht einem Knoten.

Abb. 1: Beispiele für das Aussehen eines Treeviews

Abb. 2: Das Treeview-Steuerelement finden Sie in der Liste der ActiveX-Steuerelemente, die Sie mit dem abgebildeten Menüeintrag anzeigen.

Abb. 3: Dieser Dialog ermöglicht das Einfügen des Treeview-Steuerelements.

Damit die Knoten hierarchisch angeordnet werden können, weist man untergeordneten Knoten den jeweiligen Parent-Knoten zu. Das Treeview-Steuerelement liefert viele Möglichkeiten zum Anpassen seines Aussehens. So lassen sich die folgenden Möglichkeiten leicht kombinieren:

  • Text
  • Symbole
  • Plus-/Minus-Zeichen
  • Linien
  • Kontrollkästchen
  • Um einen Überblick über die möglichen Stile zu erhalten, öffnen Sie das in der Beispieldatenbank enthaltene Formular frmTreeviewBeispiel (s. Abb. 1). Über die im linken Teil des Formulars enthaltenen Symbole können Sie sich unterschiedliche Stile ansehen. Es gibt noch einige Möglichkeiten mehr wie etwa die Verwendung von Kontrollkästchen, diese werden jedoch in diesem Grundlagenbeitrag nicht behandelt.

    Erste Schritte

    Zum Einfügen des Treeview-Steuerelements führen Sie nach dem Öffnen des Zielformulars in der Entwurfsansicht den Menübefehl Einfügen/ActiveX-Steuerelement... aus (s. Abb. 2) und wählen im dann erscheinenden Dialog den Eintrag Microsoft Treeview Control, version 6.0 aus (s. Abb. 3).

    Sie sollten generell immer die gleiche Version verwenden, wenn Sie mehrere Steuerelemente der Common Controls-Sammlung verwenden - am besten die jeweils neuesten.

    Das neue Treeview-Steuerelement erscheint zunächst als unscheinbares weißes Kästchen im Formular, offenbart aber direkt nach dem Vergrößern des Rahmens seinen wahren Charakter (s. Abb. 4). Benennen Sie das Steuerelement um, damit Sie anschließend per VBA komfortabel darauf zugreifen können. Verwenden Sie dabei einen Namen wie tvwTreeview.

    Abb. 4: Das neue Treeview-Steuerelement in der Entwurfsansicht

    Abb. 5: Der Objektkatalog informiert eingehend über die Treeview-Klasse und deren Eigenschaften, Methoden und Ereignisse.

    Abb. 6: IntelliSense steht erst nach expliziter Deklaration des Steuerelements als Treeview zur Verfügung.

    Im vorliegenden Beitrag lernen Sie die Grundlagen für den Gebrauch des Treeview-Steuerelements. Hier können aber unmöglich alle Funktionen dieses Steuerelements vorgestellt werden. Wenn Sie auf eigene Faust weiterforschen möchten, ist der Objektkatalog ein idealer Startpunkt. Wählen Sie dort die Klasse MSComctlLib und dann das Element Treeview aus, um alle Eigenschaften, Methoden und Ereignisse angezeigt zu bekommen.

    Treeview mit IntelliSense

    Treeviews können Sie ausschließlich per VBA füllen. Dummerweise bietet IntelliSense nicht die Treeview-spezifischen Eigenschaften, Methoden und Ereignisse an, wenn Sie wie folgt auf das Steuerelement verweisen:

    Me!tvwTreeview

    Wenn Sie IntelliSense verwenden möchten, was empfehlenswert ist, deklarieren Sie eine Objektvariable für das Treeview-Steuerelement im Modulkopf des Formulars und instanzieren diese an geeigneter Stelle. Die Deklaration sieht etwa wie folgt aus:

    Dim objTreeview As MSComctlLib.Treeview

    Zum Instanzieren eignet sich am besten eine der Ereignisprozeduren, die beim Öffnen des Formulars ausgeführt werden - beispielsweise das Beim Öffnen-Ereignis (s. Quellcode 1).

    Quellcode 1: Instanzieren eines Treeview-Objekts

    Private Sub Form_Open(Cancel As Integer)

        Set objTreeview = Me.ctlTreeview.Object

    End Sub

    Wenn Sie in weiteren Routinen auf das Objekt objTreeview zugreifen, statt das Steuerelement ctlTreeview zu referenzieren, stellt IntelliSense die Treeview-spezifischen Elemente zur Verfügung (s. Abb. 6).

    Eigenschaften des Treeview-Steuerelements

    Wenn Sie in der Entwurfsansicht des Formulars mit der rechten Maustaste auf das Treeview-Steuerelement klicken, können Sie im Kontextmenü den Eintrag TreeCtrl-Objekt/Eigenschaften auswählen. Mit diesem Dialog lassen sich die meisten Eigenschaften des Treeview-Steuerelements einstellen (s. Abb. 7).

    Abb. 7: Eigenschaften des Treeview-Steuerelements

    Erzeugen eines Baumes

    Das A und O beim Erzeugen eines Baumes im Treeview-Steuerelement ist die Add-Methode des Node-Elements. Die Methode erwartet sechs Parameter, die allesamt optional sind:

  • Relative: Erwartet den Index (Datentyp Integer) oder Schlüssel (String) eines Knotens, zu dem der neue Knoten in einer bestimmten Beziehung stehen soll.
  • Relationship: Beziehung, in der der neue und der unter Relative angegebene Knoten stehen. Mögliche Werte: tvwChild, tvwFirst, tvwLast, tvwNext, tvxPrevious.
  • Key: Zeichenfolge als Schlüssel des neuen Knotens. Dient zum Referenzieren des Knotens und muss zwingend mit einem Buchstaben beginnen.
  • Text: Angezeigter Text.
  • Image: Index eines Symbols, das vor dem Text angezeigt wird, wenn die Einstellung der
    Style-Eigenschaft des Treeview-Objekts dies erlaubt. Weitere Informationen zur Verwendung von Symbolen in Treeview-Objekten finden Sie weiter unten.
  • SelectedImage: Index eines Symbols, das statt des unter Image angegebenen Symbols angezeigt wird, wenn der Knoten markiert ist.
  • Alle Eigenschaften können Sie nach dem Erzeugen des Knotens ändern. Wenn Sie beim Erzeugen noch gar keine Eigenschaften zuweisen möchten (etwa aus Gründen der Übersicht), können Sie einfach die folgende Anweisung verwenden:

    objTreeview.Nodes.Add

    Wenn Sie, wie weiter oben beschrieben, ein Formular mit einem Treeview-Steuerelement angelegt, dieses in ctlTreeview umbenannt und ein entsprechendes Objekt im Formularmodul deklariert und instanziert haben, können Sie direkt das erste Element im Treeview anlegen. Dazu erweitern Sie einfach die Routine aus Listing 1 um folgende Anweisung. Beachten Sie, dass die Eigenschaften Key und Text direkt beim Anlegen mit den entsprechenden Werten gefüllt werden:

    With objTreeview

        .Nodes.Add , , "tvw01", _
            "Erster Knoten"

    End With

    Öffnen Sie das Formular, das nun wie in Abb. 8 aussehen sollte. Mit der leicht erweiterten Fassung aus Quellcode 2 legen Sie drei Unterknoten an, die wie in Abb. 9 angeordnet sind.

    Abb. 8: Der einfachste Treeview der Welt

    Abb. 9: Treeview mit Knoten auf zwei Ebenen

    Quellcode 2: Knoten mit drei Unterknoten anlegen

    Private Sub Form_Open(Cancel As Integer)

        Set objTreeview = Me.tvwBeispiel.Object

        With objTreeview

            'Basisknoten anlegen

            .Nodes.Add , , "tvw01", "Erster Knoten"

            'Knoten unterhalb des Basisknotens anlegen

            .Nodes.Add "tvw01", tvwChild, "tvw0101", "Erster Unterknoten"

            'Knoten hinter einem existierenden Knoten anlegen

            .Nodes.Add "tvw0101", tvwNext, "tvw0102", "Zweiter Unterknoten"

            'Knoten als ersten Knoten in der Ebene des angegebenen Knoten anlegen

            .Nodes.Add "tvw0101", tvwFirst, "tvw0100", "Nullter Unterknoten"

        End With

    End Sub

    Stil einstellen

    Wenn Sie keinen bestimmten Stil festlegen, verwendet Access standardmäßig den Stil tvwTreelinesText wie in Abb. 9. Wenn Sie einen anderen Stil verwenden möchten, stellen Sie die Eigenschaft Style des Treeview-Objekts etwa mit folgender Anweisung ein:

    objTreeview.Style = tvwPictureText

    Das Aussehen der verschiedenen Stile können Sie dem bereits weiter oben erwähnten Formular frmTreeviewBeispiel entnehmen.

    Quellcode 3: Instanzieren eines neuen Knotens und Zuweisen einiger Eigenschaften

    Set objNode = objTreeview.Nodes.Add(, , _
        "tvw01", "Erster Knoten")

    With objNode

        'Fette Schrift verwenden

        .Bold = True

        'Hintergrundfarbe

        .BackColor = 255

        'Schriftfarbe

        .ForeColor = 128

        'Unterknoten anzeigen

        .Expanded = True

    End With

    Knoteneigenschaften

    Mit der Add-Methode der Nodes-Auflistung können Sie bereits einige Eigenschaften des neuen Knotens festlegen. Es gibt aber noch wesentlich mehr Eigenschaften, die Sie anpassen können, wenn Sie den neuen Knoten direkt per Objektverweis referenzieren. Dazu deklarieren Sie zunächst eine entsprechende Objektvariable:

    Dim objNode As MSComctlLib.Node

    Das Anlegen eines Knotens mit passender Objektvariablen und anschließender Anpassung der Eigenschaften sieht wie in Quellcode 3 aus.

    Symbole im Treeview

    Richtig hübsch wird ein Treeview-Steuerelement erst, wenn Sie die einzelnen Knoten mit Symbolen versehen. Dabei können Sie jedem Knoten ein anderes Symbol verpassen; es ist sogar möglich, zusätzliche Symbole für unterschiedliche Zustände eines Knotens anzugeben. Die dazu verwendeten Symbole speichert man in einem ImageList-Steuerelement. Umfangreiche Informationen zum ImageList-Steuerelement und zum Füllen von Treeview-Knoten mit den enthaltenen Bildern finden Sie im Beitrag Das ImageList-Steuerelement (s. Shortlink 322).

    Zusammenfassung und Ausblick

    Im vorliegenden Beitrag haben Sie die Grundlagen zum Treeview-Objekt und zum Anlegen von Knoten erfahren. In weiteren Beiträgen lernen Sie, wie man von Drag & Drop profitiert (Drag and Drop im Treeview-Steuerelement, Shortlink 320) und ein Treeview-Steuerelement dynamisch mit Daten füllt (Treeview-Steuerelement mit Daten füllen, Shortlink 321).

    Eine Musterlösung, die das Treeview-Steuerelement verwendet, beschreibt der Beitrag Notizverwaltung (Shortlink 328). Hier finden Sie auch Informationen zu weiteren Techniken in Zusammenhang mit dem Treeview-Steuerelement.

    Download

    Download

    Die .zip-Datei enthält folgende Dateien (.mdb-Dateien mit '00' im Dateinamen funktionieren in Access 2000 und höher):

    Treeview2002.mdb

    Beispieldateien downloaden

    Kommentare und Ergänzungen

    Wenn Sie Kommentare, Fragen oder Ergänzungen zu diesem Artikel haben, können Sie diese hier eintragen. Wir bemühen uns, kurzfristig auf Ihren Kommentar einzugehen.

    Ihr Name:

    Ihre E-Mail-Adresse (für
    Rückfragen, wird nicht veröffentlicht:

    Betreff:

    Ihr Kommentar zu diesem Artikel:

    Bisherige Kommentare

    Michael Gräter schrieb am 2010-02-10 16:58:31:

    Artikel hat sehr geholfen. Eine Frage bleibt: Wie belege ich die Nodes mit Makros, die beim Klicken Anwendungen ausführen ?

    André Minhorst schrieb am 2010-02-10 17:32:46:

    Danke für die Blumen - und für die Anregung. In der Tat bin ich noch nirgends speziell auf die Ereignisse des TreeViews und seiner Elemente eingegangen. In Kurzfassung geht das so: - TreeView-Objekt im Modulkopf mit Dim WithEvents objTreeview As MSComctlLib.Treeview deklarieren - In Form_Open oder Form_Load mit Set objTreeview = Me.ctlTreeview.Object deklarieren Dann im linken Kombinationsfeld des VBA-Fensters den Eintrag objTreeView auswählen und rechts beispielsweise das Ereignis Node_Click - und in der dann erscheinenden Ereignisprozedur die gewünschten Anweisungen eintragen.

    © 2003-2010 André Minhorst Alle Rechte vorbehalten.