strange problem For Each loop in Treeview
Peter,
The Sub is fine. It was just the typo as stated in my previous post.
RBS
"Peter Beach" wrote in message
...
Hi,
I think the problem might be that your statement:
For Each nodChild in MainForm.TreeView1.Nodes
is wrong. This will direct the routine to start at the top of the tree
each
time. I would imagine you want something like:
Option Explicit
Dim sItems() As String
Dim nItem As Long
Private Sub Command1_Click()
Dim i As Long
nItem = 0
IterateTreeView tv1.Nodes(1)
For i = 0 To UBound(sItems)
Debug.Print sItems(i)
Next i
End Sub
Private Sub Form_Load()
' Fill the tree for testing purposes
Dim X As Node, Y As Node
Set X = tv1.Nodes.Add(, , "N1", "N1")
Set Y = tv1.Nodes.Add(X, tvwChild, "N11", "N11")
tv1.Nodes.Add Y, tvwChild, "N111", "N111"
tv1.Nodes.Add Y, tvwChild, "N112", "N112"
Set X = tv1.Nodes.Add(, , "N2", "N2")
tv1.Nodes.Add X, tvwChild, "N21", "N21"
tv1.Nodes.Add X, tvwChild, "N22", "N22"
End Sub
Sub IterateTreeView(a_oNode As Node)
Dim X As Node
ReDim Preserve sItems(nItem) As String
sItems(nItem) = a_oNode.Text
Set X = a_oNode.Child
If Not X Is Nothing Then
nItem = nItem + 1
IterateTreeView X
End If
Set X = a_oNode.Next
Do While Not X Is Nothing
nItem = nItem + 1
IterateTreeView X
Set X = X.Next
Loop
End Sub
HTH
Peter Beach
"RB Smissaert" wrote in message
...
Use a recursive Sub to traverse the nodes of a Treeview control from top
to
bottom.
Noticed that there is a problem if 2 nodes in the Treeview have the same
text.
Rather than ending at the lowest node the sub returns to the higher node
with the same text and the Sub doesn't exit.
This are the 2 Subs that demonstrate it:
Sub Tester(ByRef nodcurrent As Node, _
ByVal intdepth As Integer)
Dim nodChild As Node
If nodcurrent.Children 0 Then
For Each nodChild In MainForm.TreeView1.Nodes
If Not nodChild.Parent Is Nothing Then
If nodChild.Parent = nodcurrent Then
MsgBox nodChild.Text
Call Tester(nodChild, (intdepth + 1))
End If
End If
Next nodChild
End If
End Sub
Sub DoTester()
Tester MainForm.TreeView1.Nodes(1), 0
End Sub
Is this a known bug, or am I doing something wrong?
One way to solve this problem is to fill an array with the indeces of
the
visited nodes and make sure the same node doesn't get visited twice, but
perhaps there is a better solution for this.
Thanks for any advice.
RBS
|