以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  目录树同步勾选和跨级同步勾选的标准代码  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=68094)

--  作者:狐狸爸爸
--  发布时间:2015/5/9 16:16:00
--  目录树同步勾选和跨级同步勾选的标准代码

图片点击可在新窗口打开查看此主题相关图片如下:1993.png
图片点击可在新窗口打开查看

假定有上图所示的目录树,希望:


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

[此贴子已经被作者于2015/5/9 16:16:22编辑过]

--  作者:lsy
--  发布时间:2015/5/9 18:25:00
--  
狐爸微服私访来了。
--  作者:L88919138
--  发布时间:2015/5/9 19:56:00
--  
图片点击可在新窗口打开查看