Das TreeView-Steuerelement: Grundlagen, Teil II

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Das TreeView-Steuerelement ist der Alleskönner zur Anzeige hierarchischer Daten. Sie zeigen damit sowohl die Daten aus Tabellen mit reflexiver Verknüpfung an als auch Daten, die aus verschiedenen verknüpften Tabellen stammen – wie etwa Kunden und Projekte. Das Steuerelement kann als ActiveX-Steuerelement im Gegensatz zu den eingebauten Steuerelementen von Access nicht direkt an eine Datenherkunft gebunden werden, also ist ein wenig Handarbeit nötig, um dieses zu füllen. In dieser Artikelreihe lernen Sie die Grundlagen zu diesem Steuerelement kennen und erfahren, wie Sie es mit Daten füllen.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1308_TreeView.mdb.

TreeView-Verlust vorbeugen

Gerade während der Entwicklung und beim Experimentieren mit den Möglichkeiten des TreeViews treten des öfteren Fehler auf. Wird ein Fehler nicht behandelt, führt dies dazu, dass Objektvariablen wie obj-TreeView zurückgesetzt und somit geleert werden.

Das bedeutet, das erstens keine für dieses Steuerelement programmierten Ereignisse mehr ausgelöst werden und dann der Zugriff per Code auf die entsprechende Objektvariable wiederum zu Fehlern führt.

Es gibt jedoch eine Möglichkeit, diese Variable bei Bedarf immer wieder neu mit einem Verweis auf das TreeView-Steuerelement zu füllen.

Dazu deklarieren Sie die Variable zum Speichern des Verweises ähnlich wie zuvor, diesmal allerdings unter einem anderen Namen – nämlich m_TreeView. Der Grund ist, dass wir den zuvor verwendeten Namen objTreeView als Name einer Property Get-Prozedur verwenden. Genaueres über solche Prozeduren erfahren Sie in einem späteren Artikel über die Klassenprogrammierung unter VBA – fürs erste reicht es, wenn Sie wissen, dass die Property Get-Prozedur ähnlich wie eine Funktion einen Wert oder einen Verweis zurückliefert.

In diesem Fall prüft diese Prozedur, ob die Variable m_TreeView bereits gefüllt ist, und zwar durch den Is-Vergleich mit dem Ausdruck Nothing. Ist dies wahr, wurde die Variable entweder noch nicht befüllt oder ist durch einen Fehler wieder geleert worden.

In beiden Fällen soll diese jedoch gefüllt werden. Der Inhalt der Variablen wird dann, unabhängig davon, ob er erst jetzt gefüllt wurde oder bereits gefüllt war, mit der Property Get-Prozedur objTreeView zurückgegeben (siehe Listing 1).

Dim WithEvents m_Treeview As MSComctlLib.TreeView
Private Property Get objTreeView() As MSComctlLib.TreeView
     If m_Treeview Is Nothing Then
         Set m_Treeview = Me!ctlTreeView.Object
     End If
     Set objTreeView = m_Treeview
End Property

Listing 1: objTreeView liefert immer einen Verweis auf das TreeView-Steuerelement in ctlTreeView.

objTreeView muss auf diese Weise nicht mehr in der Form_Load-Ereignisprozedur gefüllt werden.

Dieses Beispiel finden Sie im Formular frmTreeView_mTreeView.

TreeView-Eigenschaften per Code einstellen

Wenn Sie hier und da TreeView-Steurelemente einbauen, möchten Sie vielleicht gern die Eigenschaften wie bei einem TreeView-Steuerelement einstellen, mit denen bereits gute Erfahrungen in einer anderen Anwendung gemacht haben.

In meinen Anwendungen verzichte ich daher völlig auf die Einstellung der Eigenschaften über den entsprechenden Dialog des TreeView-Steuerelements im Formularentwurf. Ich stelle die Eigenschaften immer gleich beim Laden des Formulars per VBA-Code ein. Für einige Standardeigenschaften, die sich auf das Aussehen des TreeView-Steuerelements beziehen, sieht dies etwa wie folgt aus:

Private Sub Form_Load()
     With objTreeView
         .Appearance = ccFlat
         .BorderStyle = ccNone
         .LineStyle = tvwRootLines
         .Style = µ 
             tvwTreelinesPlusMinusText
     End With
End Sub

In den folgenden Beispielen kommen je nach Bedarf noch weitere Eigenschaften hinzu. Wenn Sie diese Eigenschaften für TreeView-Steuerelemente in andere Formulare oder gar andere Anwendungen übernehmen möchten, kopieren Sie einfach die entsprechenden Codezeilen in die Form_Load-Prozedur.

TreeView füllen

Nun haben wir die Voraussetzungen dafür geschaffen, dass TreeView-Steuerelement per VBA mit den gewünschten Werten zu füllen.

Das TreeView-Steuerelement besitzt eine Auflistung namens Nodes, die alle im TreeView-Steuerelement angezeigten Element aufnimmt. Ein einzelnes Element im TreeView heißt dementsprechend Node. Um ein Node-Objekt zum TreeView hinzuzufügen, verwenden Sie die Add-Methode der Nodes-Auflistung.

Wenn Sie einen Node zur obersten Ebene der Hierarchie im TreeView-Steuerelement einfügen möchten, sieht der Aufruf etwa wie in Listing 2 aus. Das Element wird hier bei Laden des Formulars hinzugefügt (siehe Bild 1).

Erstes Element im TreeView-Steuerelement

Bild 1: Erstes Element im TreeView-Steuerelement

Die Add-Methode erwartet die folgenden Parameter:

  • Relative: Gibt den Key-Wert eines Elements an, zu dem das neue Element in Beziehung stehen soll.
  • Relationship: Gibt die Beziehung des neuen Elements zu dem in Relative bezeichneten Element an. Die Werte sind tvwChild, tvwFirst, tvwLast, tvwNext, tvwPrevious.
  • Key: Ein eindeutiger Schlüssel für jedes Element, der mit einem Buchstaben beginnen muss.
  • Text: Der durch das Element angezeigte Text.
  • Image: Name eines Bildes, das als Icon des Elements angezeigt werden soll.
  • SelectedImage: Name eines Bildes, dass statt des in Image festgelegten Bildes angezeigt werden soll, wenn das Element ausgewählt ist.

Zum Anlegen eines ersten Elements reichen die beiden Parameter Key und Text aus.

Zu den Eigenschaften Image und SelectedImage kommen wir in einem späteren Teil der Artikelreihe.

Da es etwas müßig ist, das Formular zum Ausprobieren des Codes nach jeder änderung immer wieder neu zu schließen und zu öffnen, fügen wir diesem eine Schaltfläche hinzu, das die Prozedur zum Füllen des TreeView-Steuerelements auslöst.

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

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar