如何遍历treeview的所有节点

yul26 2004-08-24 09:53:14
对于treeview的节点访问我只发现了使用nodes属性,但是Nodes.Item(index)属性需要取得指定节点的index,在经过一系列的增加和删除操作以后,这个index已经不连续了,我如果才能遍历所有的节点呢
...全文
710 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
kmzs 2004-08-25
  • 打赏
  • 举报
回复
Fn = Fn + 1
Do While Fn <= .Nodes.Count
'获得信息
If .Nodes(NodeKey).Children <> 0 Then
NodeKey = .Nodes(NodeKey).Child.Key
ElseIf .Nodes(NodeKey).Next Is Nothing = False Then
NodeKey = .Nodes(NodeKey).Next.Key
Else
Do While .Nodes(NodeKey).Parent.Next Is Nothing
If .Nodes(NodeKey).Parent Is Nothing = False Then NodeKey = .Nodes(NodeKey).Parent.Key
Loop
Do While .Nodes(NodeKey).Parent.Next Is Nothing = False
NodeKey = .Nodes(NodeKey).Parent.Next.Key
Exit Do
Loop
End If
Fn = Fn + 1
print NodeKey
Loop
kmzs 2004-08-25
  • 打赏
  • 举报
回复
不好意思,漏了Fn = Fn + 1
Do While Fn <= .Nodes.Count
'获得信息
If .Nodes(NodeKey).Children <> 0 Then
NodeKey = .Nodes(NodeKey).Child.Key
ElseIf .Nodes(NodeKey).Next Is Nothing = False Then
NodeKey = .Nodes(NodeKey).Next.Key
Else
Do While .Nodes(NodeKey).Parent.Next Is Nothing
If .Nodes(NodeKey).Parent Is Nothing = False Then NodeKey = .Nodes(NodeKey).Parent.Key
Loop
Do While .Nodes(NodeKey).Parent.Next Is Nothing = False
NodeKey = .Nodes(NodeKey).Parent.Next.Key
Exit Do
Loop
End If
Fn = Fn + 1
Loop
kmzs 2004-08-25
  • 打赏
  • 举报
回复
这个index已经不连续了???
不可能,从数字上是连续的

不过位置已经不连续了
这个比较复杂,我做过,可以参考(遍历节点的key):
Do While Fn <= .Nodes.Count
'获得信息
If .Nodes(NodeKey).Children <> 0 Then
NodeKey = .Nodes(NodeKey).Child.Key
ElseIf .Nodes(NodeKey).Next Is Nothing = False Then
NodeKey = .Nodes(NodeKey).Next.Key
Else
Do While .Nodes(NodeKey).Parent.Next Is Nothing
If .Nodes(NodeKey).Parent Is Nothing = False Then NodeKey = .Nodes(NodeKey).Parent.Key
Loop
Do While .Nodes(NodeKey).Parent.Next Is Nothing = False
NodeKey = .Nodes(NodeKey).Parent.Next.Key
Exit Do
Loop
End If
Loop
viena 2004-08-25
  • 打赏
  • 举报
回复
错了
nodes.next 下一个节点
应该是
node.next 下一个节点
viena 2004-08-25
  • 打赏
  • 举报
回复
用到的属性:
node.children 子节点数
node.child 第一个子节点
nodes.next 下一个节点
viena 2004-08-25
  • 打赏
  • 举报
回复
//各位大虾用递归如何做啊?
递归函数:在函数中传入一个节点,遍历此节点的所有子节点,并对找到的每一个子节点调用本函数(递归函数)
然后对根节点调用此函数即可
mxfeng 2004-08-25
  • 打赏
  • 举报
回复
呵呵,有一次面试我遇到这个题了,要求用递归,不过我没做出来,各位大虾用递归如何做啊?
flyingZFX 2004-08-25
  • 打赏
  • 举报
回复
Dim I As Integer

For I = 1 To TreeView1.Nodes.Count
Debug.Print TreeView1.Nodes(I).Text
Next
落伍者 2004-08-25
  • 打赏
  • 举报
回复
treeview的node的几个属性可以帮助遍历树
1、parent '节点的父节点
2、child '节点的子节点
3、children 节点的子节点的个数
4、FirstSibling 属性 这个属性返回对 TreeView 控件中的 Node 对象的第一个相邻对象的引用。
5、LastSibling 属性 这个属性返回对 TreeView 控件中的 Node 对象的最后相邻节点的引用。
示例:
Private Sub TreeView1_NodeClick(ByVal Node As Node)
Dim strText As String
Dim n As Integer
'设置 n 为第一个相邻节点的索引。
n = Node.FirstSibling.Index
'在字符串变量中安放第一个相邻节点的文本和换行。
strText = Node.FirstSibling.Text & vbLF
While n <> Node.LastSibling.Index
'当 n 不是最后相邻节点的索引时,转向下一个相邻的节点
'并将它的文本安放到字符串变量中。
strText = strText & TreeView1.Nodes(n).Next.Text & vbLF
'设置 n 为下一个节点的索引。
n = TreeView1.Nodes(n).Next.Index
Wend
MsgBox strText '显示结果。
End Sub

northwolves 2004-08-24
  • 打赏
  • 举报
回复
1.
Private Sub Command1_Click()

Dim NODX As Node
For Each NODX In TreeView1.Nodes
Debug.Print NODX.Text
Next
End Sub

2.
Private Sub Command2_Click()
Dim I As Integer
For I = 1 To TreeView1.Nodes.Count
Debug.Print TreeView1.Nodes(I)
Next
End Sub

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧