AllNodes
我们知道,目录树有Nodes属性,用于返回目录树的节点集合,节点自身也有Nodes属性,用于返回其子节点集合。
需要注意的是,Nodes只包括一级子节点,不包括更深层级的子节点。
以下图为例,目录树的Nodes属性包括两个节点,分别是"家电产品"和"数码产品",而"家电产品"这个节点的Nodes属性,则只包括一个节点"电视机":
但是有的时候,我们需要处理的不仅仅是一级节点,例如所有层级的子节点,例如希望遍历所有层级的节点,选中符合特定条件的节点的复选框,利用Nodes属性是无法完成的。
所以除Nodes属性外,目录树和节点还有另一个名为AllNodes的属性,用于返回所有层级的节点的集合。
示例一
遍历所有节点,选中内容包含"上海"的节点的复选框:
Dim
trv As
WinForm.TreeView
= e.Form.Controls("TreeView1")
For
Each nd
As WinForm.TreeNode
In trv.AllNodes
If nd.Text.IndexOf("上海")
>= 0 Then
nd.Checked
= True
End
If
Next
示例二
如果希望选中某个节点的复选框,其子节点能够同步选中,反之亦然。
为此只需将目录树的AfterCheckNode事件代码设置为:
For Each
nd
As
WinForm.TreeNode
In
e.Node.AllNodes
nd.Checked = e.Node.Checked
Next
可以看出,AllNodes属性可以大大提高目录树编码的灵活型。
示例三
目录树显示复选框之后,默认是可以多选的,如果希望只能单选,可以在AfterCheckNode事件中加上代码:
If
e.node.Checked Then
For Each nd As WinForm.TreeNode In e.Sender.AllNodes
If nd.Checked
AndAlso nd.FullPath
<> e.node.FullPath
Then
nd.Checked
= False
End If
Next
End If