Enumerate Treeview Nodes Recursively

Enumerate Treeview Nodes Recursively

Trying to parse a set of TreeView nodes and their children’s nodes and their children’s nodes can be confusing. This algorithm makes the process easier. Recursion describes an algorithm that can call itself. This is especially useful in COM’s object hierarchy. Collections that can reference other collections can be easily handled with a recursive procedure. To begin the recursion, place this code in a CommandButton labeled “View Nodes.” Here you create a variable to store the results of the procedure and start the recursion, and also display the results when the routine is finished:

 Dim N As Node, aNodes As String, lLevel As LongSet N = TreeView1.SelectedItemIf N.Children Then aNodes = "+" & N.Text Else _	aNodes = N.TextEnumChildren N, aNodes, lLevelMsgBox aNodes

Next is the recursive procedure. It calls itself after changing the Node parameter, and the lLevel variable is incremented at the beginning of the routine and decremented at the end. This variable determines the distance to tab from the beginning of the display line, and therefore shows the nodes in the proper child-parent relationship:

 Sub EnumChildren(N As Node, aNodes As String, _	lLevel As Long)	lLevel = lLevel + 1	Dim nC As Node	If N.Children Then		Set nC = N.Child		Do			If nC.Children Then				aNodes = aNodes & vbCrLf & String$ _					(lLevel, vbTab) & "+" & nC.Text			Else				aNodes = aNodes & vbCrLf & String$ _					(lLevel, vbTab) & nC.Text			End If			EnumChildren nC, aNodes, lLevel			If nC.Index = N.Child.LastSibling. _				Index Then Exit Do			Set nC = nC.Next		Loop	End If	lLevel = lLevel - 1End Sub


Share the Post: