|
Sie möchten alle unter einem Knoten liegenden Zweige in einem TreeView-Steuerelement auf einen Schlag komplett öffnen? Die folgende Prozedur erledigt diese Aufgabe, indem sie den übergebenen Knoten öffnet und sich danach für jeden Kind-Knoten dieses Knotens erneut selbst aufruft ("Rekursion").
Public Sub TvwOpenTreeFull(StartNode As Node)
Dim nChildNode As Node
StartNode.Expanded = True
Set nChildNode = StartNode.Child
Do While Not (nChildNode Is Nothing)
TvwOpenTreeFull nChildNode
Set nChildNode = nChildNode.Next
Loop
End Sub
Wenn die unteren zweige nur bis zu einer bestimmten Tiefe hin geöffnet werden sollen, können Sie die folgende Prozedur verwenden, der Sie zusätzlich die Anzahl der zu öffnenden Ebenen angeben. Auch diese Prozedur ruft sich selbst wieder auf, verringert jedoch mit jedem Aufruf die Anzahl der verbleibenden Ebenen. Diese Anzahl "verbraucht" sich so gewissermaßen - wenn sie 0 erreicht, erfolgenden keine weiteren Aufrufe in die Tiefe.
Public Sub TvwOpenTreeNode(StartNode As Node, ByVal Depth As Long)
Dim nChildNode As Node
If Depth Then
Depth = Depth - 1
StartNode.Expanded = True
Set nChildNode = StartNode.Child
Do While Not (nChildNode Is Nothing)
TvwOpenTreeNode nChildNode, Depth
Set nChildNode = nChildNode.Next
Loop
End If
End Sub
Die folgende Prozedur bietet einen universalen Aufruf zum Öffnen von Zweigen. Hier können Sie optional sowohl den Startknoten als auch die Tiefe angeben. Geben Sie keinen Startknoten an, werden alle Knoten der ersten Ebene geöffnet. Geben Sie keine Tiefe an, werden diese Knoten vollständig geöffnet. Die Prozedur selbst unterscheidet nur die verschiedenen Kombinationsmöglichkeiten der Parameter. Die Ausführung selbst wird jeweils wieder von den beiden oben stehenden Prozeduren erledigt.
Public Sub TvwOpenTree(TreeView As TreeView, _
Optional StartNode As Node, _
Optional ByVal Depth As Variant)
Dim nStartNode As Node
Dim nDepth As Long
If StartNode Is Nothing Then
If TreeView.Nodes.Count Then
Set nStartNode = TreeView.Nodes(1).Root.FirstSibling
Else
Exit Sub
End If
If IsMissing(Depth) Then
Do While Not (nStartNode Is Nothing)
TvwOpenTreeFull nStartNode
Set nStartNode = nStartNode.Next
Loop
Else
nDepth = CLng(Depth)
Do While Not (nStartNode Is Nothing)
TvwOpenTreeNode nStartNode, nDepth
Set nStartNode = nStartNode.Next
Loop
End If
Else
Set nStartNode = StartNode
If IsMissing(Depth) Then
TvwOpenTreeFull nStartNode
Else
TvwOpenTreeNode nStartNode, CLng(Depth)
End If
End If
End Sub
|