TreeView中节点勾选设置

简介: 本文转载:http://www.cnblogs.com/luxiaoxun/p/3288003.html 很不错的文章:http://www.cnblogs.com/allen0118/archive/2012/11/28/2793037.html   TreeView树中节点勾选要求: 1、不选中一个节点,则其所有的子节点都不被选中。

本文转载:http://www.cnblogs.com/luxiaoxun/p/3288003.html

很不错的文章:http://www.cnblogs.com/allen0118/archive/2012/11/28/2793037.html

 

TreeView树中节点勾选要求:

1、不选中一个节点,则其所有的子节点都不被选中。

2、选中一个节点,则其所有的子节点都被选中。

3、当一个节点的所有子节点都没有被选中时,该节点也没有被选中。

4、当一个节点的所有子节点中有一个被选中时,则该节点也被选中。

代码中对事件参数e.Action的判断,可以避免在改变节点的Checked的状态时,再次进入AfterCheck(),这样当在AfterCheck()中有其他逻辑响应时,可以做到每次勾选时,其他逻辑也只响应一次。

参考代码:

 

private  void treeView_AfterCheck( object sender, TreeViewEventArgs e)
        {
             // 通过鼠标或者键盘触发事件,防止修改节点的Checked状态时候再次进入
             if (e.Action == TreeViewAction.ByMouse || e.Action == TreeViewAction.ByKeyboard)
            {
                SetChildNodeCheckedState(e.Node, e.Node.Checked);
                SetParentNodeCheckedState(e.Node, e.Node.Checked);
            }
        }

         // 设置子节点状态
         private  void SetChildNodeCheckedState(TreeNode currNode,  bool isCheckedOrNot)
        {
             if (currNode.Nodes ==  nullreturn// 没有子节点返回
             foreach (TreeNode tmpNode  in currNode.Nodes)
            {
                tmpNode.Checked = isCheckedOrNot;
                SetChildNodeCheckedState(tmpNode, isCheckedOrNot);
            }
        }

         // 设置父节点状态
         private  void SetParentNodeCheckedState(TreeNode currNode,  bool isCheckedOrNot)
        {
             if (currNode.Parent ==  nullreturn// 没有父节点返回
             if (isCheckedOrNot)  // 如果当前节点被选中,则设置所有父节点都被选中
            {
                currNode.Parent.Checked = isCheckedOrNot;
                SetParentNodeCheckedState(currNode.Parent, isCheckedOrNot);
            }
             else  // 如果当前节点没有被选中,则当其父节点的子节点有一个被选中时,父节点被选中,否则父节点不被选中
            {
                 bool checkedFlag =  false;
                 foreach (TreeNode tmpNode  in currNode.Parent.Nodes)
                {
                     if (tmpNode.Checked)
                    {
                        checkedFlag =  true;
                         break;
                    }
                }
                currNode.Parent.Checked = checkedFlag;
                SetParentNodeCheckedState(currNode.Parent, checkedFlag);
            }
        }
View Code

 

目录
相关文章
|
JavaScript
VUE element-ui之el-tree树形控件勾选节点指定节点自动勾选(指定节点为必选项)
VUE element-ui之el-tree树形控件勾选节点指定节点自动勾选(指定节点为必选项)
1411 0
VUE element-ui之el-tree树形控件勾选节点指定节点自动勾选(指定节点为必选项)
|
6月前
|
JSON 前端开发 数据格式
获取ztree树的选中子菜单信息并且提交给后端
获取ztree树的选中子菜单信息并且提交给后端
26 0
获取ztree树的选中子菜单信息并且提交给后端
|
6月前
|
JavaScript Java
ztree实现根节点右击事件,弹出菜单进行增删改操作
ztree实现根节点右击事件,弹出菜单进行增删改操作
19 0
|
6月前
|
Web App开发 JSON 前端开发
ztree实现根节点单击事件,显示节点信息
ztree实现根节点单击事件,显示节点信息
40 0
|
6月前
zTree根据ID选中节点
zTree根据ID选中节点
|
7月前
|
API
12zTree - 单击节点控制
12zTree - 单击节点控制
18 0
WPF TreeView设置所有节点默认展开
WPF TreeView设置所有节点默认展开
|
JavaScript API 开发者
10、DOM基础(元素节点、属性节点、文本节点、轮播图、改变颜色、选中取消)
10、DOM基础(元素节点、属性节点、文本节点、轮播图、改变颜色、选中取消)
89 0
10、DOM基础(元素节点、属性节点、文本节点、轮播图、改变颜色、选中取消)
easyui的treegrid的级联勾选子节点,或者级联勾选父节点
easyui的treegrid的级联勾选子节点,或者级联勾选父节点
3271 0