假定有上图所示的目录树,希望:
1、勾选某节点后,能同步勾选所有子节点,反之亦然。
2、清除某节点勾选状态后,其父节点的勾选状态也能同步被清除。
为此,可以设置AfterCheckNode事件代码为:
For
Each
nd As WinForm.TreeNode
In e.node.Nodes \'同步子节点选中状态
nd.Checked = e.node.Checked
Next
If e.node.Checked = False
Then
\'如果本次操作为清除节点选中状态
Dim pd As WinForm.TreeNode = e.node.ParentNode
\'获取父节点
If pd IsNot
Nothing
Then
pd.Checked = False
\'清除父节点选中状态
End
If
End
If
上面的代码只能处理一级子节点,表现在:
1、如果我们勾选数码产品,那么电脑、电脑配件、相机会同步勾选,但是笔记本、服务器等二级子节点并不会同步勾选。
2、如果我们清除台式机的勾选状态,那么只能同步清除电脑的勾选状态,再上一级的数码产品的勾选状态则不会发生变化。
要实现跨层同步的目的,可以将代码改为:
For
Each
nd As WinForm.TreeNode
In e.node.AllNodes
\'同步子节点选中状态
If nd.FullPath.StartsWith(e.node.FullPath)
Then
nd.Checked = e.node.Checked
End
If
Next
If e.node.Checked = False
Then
\'如果本次操作为清除节点选中状态
Dim pd As WinForm.TreeNode = e.node.ParentNode
\'获取父节点
Do
While pd IsNot
Nothing
pd.Checked = False
\'清除父节点选中状态
pd = pd.ParentNode \'继续获取上一层级的父节点
Loop
End
If