Foxtable(狐表)用户栏目专家坐堂 → 目录树同步勾选和跨级同步勾选的标准代码


  共有2728人关注过本帖树形打印复制链接

主题:目录树同步勾选和跨级同步勾选的标准代码

帅哥哟,离线,有人找我吗?
狐狸爸爸
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
目录树同步勾选和跨级同步勾选的标准代码  发帖心情 Post By: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编辑过]

 回到顶部