While the TreeView control with its associated Node objects isa far cry better than the VB3 Outline control, it lacks a methodfor sequentially traversing the tree, as if you were scrollingusing the up and down arrow keys. The For Each construct allowsyou to process every node, but in order of Index, which can bemeaningless if the tree is sorted by the display text. This code,to be called after the TreeView has been loaded and sorted, createsa 1-based array of keys in the order that the Nodes appear ina TreeView:
Global asKey() as StringSub Main() '...Fill the TreeView1 control ReDim asKey(1 To _ TreeView1.Nodes.Count) As String KeyArray TreeView1.Nodes(1).Root.FirstSibling, 1End SubPrivate Sub KeyArray(n as Node, _ Optional iStart) Static i As Integer If IsMissing(iStart) Then i = i + 1 Else i = iStart End If asKey(i) = n.Key If n.Children > 0 Then KeyArray _ n.Child Do While n <> n.LastSibling i = i + 1 Set n = n.Next asKey(i) = n.Key If n.Children > 0 Then _ KeyArray n.Child LoopEnd Sub
The first sibling of the root of an arbitrary node is used toreturn the first entry in the TreeView. The use of the Optionalparameter allows the routine to be called whenever the TreeViewis reloaded or modified. Once the array is established, it allowsfor sequential navigation or searching, or whatever operationwould benefit from knowing the order of all Nodes.