|
Wenn Sie bloß eine hierarchische Datenstruktur benötigen, wie Sie sie etwa vom TreeView-Steuerelement aus den Microsoft Common Controls (Version 6) her kennen, brauchen Sie eine solche nicht unbedingt selbst aufwändig zu implementieren. Sie können nämlich das TreeView-Steuerelement auch verwenden, ohne es auf einem Form zu platzieren - eben als abstrakte Datenstruktur
Statt die Microsoft Common Controls in die Werkzeugleiste aufzunehmen, reicht es auch, lediglich einen Verweis auf die Datei MSCOMCTL.OCX in ein Projekt einzufügen. Sie können dann ein TreeView-Objekt wie eine Klasse instanzieren und verwenden.
Dim Tree As TreeView
Set Tree = New TreeView
Tree.Nodes.Add , , "Root", "Wurzel"
So kommen Sie beispielsweise auch in den Genuss der unabhängigen Sortierbarkeit jedes einzelnen Knotens anhand seiner Text-Eigenschaft, die Sie neben der Key-Eigenschaft als so zu sagen "logischem" Schlüssel als Sortier-Schlüssel verwenden können. Zur Ablage der eigentlichen Daten verwenden Sie die Tag-Eigenschaft, der Sie sogar ein Objekt zuweisen können, etwa eine spezialisierte Klasse mit weiteren Eigenschaften und Fähigkeiten (Methoden).
Natürlich hat es hier wenig Sinn, auf Eigenschaften und Methoden eines Node-Objekts oder des TreeViews selbst zuzugreifen, die nur für das sichtbare Steuerelement relevant sind. Aber einige der Eigenschaften, die bei der sichtbaren Verwendung ihre eigene Bedeutung haben, können Sie nun frei für eigene Zwecke einsetzen. So können Sie etwa die Expanded-Eigenschaft dazu zweckentfremden, ganze Äste zu sperren oder freizugeben, beispielsweise für Suchläufe.
Wenn sie wollen, können Sie ein "formlos" instanziertes TreeView-Objekt sogar einer Ereignisempfänger-Variablen zuweisen (mit WithEvents deklariert) und die Ereignisse Expand bzw. Collapse auswerten, wenn die Expanded-Eigenschaft eines Knotens per Code geändert wird. Die Ereignisse NodeCheck und NodeClick hingegen werden offensichtlich nicht ausgelöst, wenn die Checked- oder die Selected-Eigenschaft eines Knotens gesetzt wird.
|