|
Auf welcher Ebene der Verschachtelungstiefe befindet sich
eigentlich ein TreeView-Knoten? Diese Frage könnten Sie
beantworten, wenn Sie die Anzahl der Parents eines Knotens
ermitteln. Das ginge in einer Do...Loop-Schleife, die
abbricht, wenn ein Knoten in der Hierarchie keinen Parent-Knoten
mehr hat. Sie bräuchten nur noch mitzuzählen.
Einfacher lässt sich die Frage jedoch beantworten, wenn Sie den
Inhalt der FullPath-Eigenschaften eines Knotens auswerten. Diese
verwendet nämlich die Inhalte Text-Eigenschaften der gesamten
Parent-Kette eines Knotens, um den Pfad eines Knotens darzustellen.
Da das voreingestellte Pfad-Trennzeichen wie bei einem Dateisystem der
"\" ist, sieht das tatsächlich auch aus wie ein
Dateipfad. Die Ebene, auf der sich ein Knoten befindet, ist schlicht
die Anzahl der in dem FullPath-String enthaltenen Trennzeichen plus
1.
In Visual Basic 6 können Sie mit Hilfe einer
kleinen Zweckentfremdung der Replace-Funktion schnell ermitteln, wie
oft ein Zeichen (oder sogar ein Teil-String) in einem String
enthalten ist. Sie halten die Länge des Strings fest, ersetzen die
Trennzeichen durch Leerstrings und ermitteln nun die Differenz
zwischen der ursprünglichen Länge und der neuen Länge des
Strings.
Public Function TreeNodeLevel(TreeView As TreeView, Node As Node) _
As Long
Dim nFullPath1 As String
Dim nFullPath2 As String
nFullPath1 = Node.FullPath
nFullPath2 = Replace(nFullPath1, TreeView.PathSeparator, "")
TreeNodeLevel = Len(nFullPath1) - Len(nFullPath2) + 1
End Function
In den früheren Visual Basic-Versionen 4 und
5 steht die Replace-Funktion noch nicht zur Verfügung. Aber
auch hier können Sie die Anzahl der Trennzeichen in einer Do...Loop-Schleife
und mit Hilfe der Instr-Funktion recht einfach ermitteln.
Public Function TreeNodeLevel2(TreeView As TreeView, Node As Node) _
As Long
Dim nStart As Integer
Dim nEbene As Integer
Dim nPathSeparator As String
Dim nFullPath As String
Dim nPos As Integer
nFullPath = Node.FullPath
nPathSeparator = TreeView.PathSeparator
nStart = 1
nEbene = 1
Do
nPos = InStr(nStart, nFullPath, nPathSeparator)
If nPos Then
nEbene = nEbene + 1
nStart = nPos + 1
Else
Exit Do
End If
Loop
TreeNodeLevel2 = nEbene
End Function
|