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


本页地址:http://www.foxtable.com/webhelp/topics/2302.htm