Rubrik: Controls · TreeView | VB-Versionen: VB4, VB5, VB6 | 11.04.04 |
Child-Nodes eines Parent-Node-Objekt ermitteln (TreeView) Dieser Tipp zeigt, wie sich im TreeView-Control alle Child-Node-Objekte eines bekannten Parent-Node-Objekts ermitteln lassen. | ||
Autor: Dieter Otter | Bewertung: | Views: 31.214 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Immer wieder taucht die Frage auf, wie man prüft, ob ein bestimmtes Node-Objekt im TreeView-Control weitere Child-Nodes enthält und wie man diese dann ggf. ermitteln kann.
Ob ein Node-Objekt "eigene" Child-Objekte besitzt lässt sich über die Children-Eigenschaft ermitteln, mit der man die Anzahl der Kind-Objekte zurückgeliefert bekommt:
Dim nChilds As Long nChilds = TreeView1.Nodes("ParentKey").Children
Liefert Children einen Wert größer als Null, lässt sich über die Child-Eigenschaft das erste Kind-Objekt ermitteln:
Dim oChild As Node If nChilds > 0 Then Set oChild = TreeView1.Nodes("ParentKey").Child ... End If
Über die Next-Eigenschaft des Child-Objekts kann man jetzt auf das nächste Child-Objekt des Parent-Node-Objekts zugreifen - und zwar solange, bis die Next-Eigenschaft den Wert Nothing zurückliefert. Das Ganze sieht dann in etwa so aus:
Dim oChild As Node With TreeView1.Nodes("ParentKey") ' Existieren Child-Objekte? If .Children > 0 Then ' Alle Child-Objekte ermitteln Set oChild = .Child ' 1. Child-Objekt Do Debug.Print oChild.Text ' nächstes Child-Objekt Set oChild = oChild.Next Loop Until oChild Is Nothing End If End With
Anwendungsbeispiel:
Sollen die Beschriftungen der einzelnen Child-Objekte eines Parent-Node-Objekts bspw. in ein String-Array gespeichert werden, kann man das wie folgt machen:
' alle Childs eines Parent-Node-Objekts in ein ' Array speichern Dim sChild() As String Dim nChild As Long Dim oChild As Node With TreeView1.Nodes("ParentKey") ' Existieren Child-Objekte? If .Children > 0 Then ' Array dimensionieren ReDim sChild(.Children - 1) ' Laufvariable nChild = 0 ' 1. Child-Objekt Set oChild = .Child Do sChild(nChild) = oChild.Text nChild = nChild + 1 ' nächstes Child-Objekt Set oChild = oChild.Next Loop Until oChild Is Nothing End If End With