TreeView中节点勾选设置

本文转载: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 == null) return; //没有子节点返回
            foreach (TreeNode tmpNode in currNode.Nodes)
            {
                tmpNode.Checked = isCheckedOrNot;
                SetChildNodeCheckedState(tmpNode, isCheckedOrNot);
            }
        }

        //设置父节点状态
        private void SetParentNodeCheckedState(TreeNode currNode, bool isCheckedOrNot)
        {
            if (currNode.Parent == null) return; //没有父节点返回
            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

 

时间: 2024-10-13 00:26:22

TreeView中节点勾选设置的相关文章

怎样把修改过节点的treeview的节点信息保存到xml中去

问题描述 我的xml文件是用openfiledialog打开的,我将xml的内容显示在treeview中,现在我设置了右键菜单可以对节点进行修改,怎样点击save按钮可以将修改后的内容保存会原来的xml中..求代码啊,我写了半天还是不行 解决方案 解决方案二:tree其实结构跟xml很类似..树各个节点的ID值对应xml的节点ID,当你操作树节点的时候,就会获取该节点的ID,根据该ID(xpath语法)取得xml节点,剩下的就是编辑节点.保存xml文档.<root><nodeid='1'

关于DEV TreeList自动勾选问题

问题描述 我在数据库中有个字段是保存了treelist节点选中或没选中的值(true或false),我是想在窗体中显示treelist时,菜单列自动根据权限列的true或false来判断是否给菜单节点勾选或取消勾选,怎么实现,我的是VS2010,VB.NET一般情况是这样我想窗体打开时自动变成这样在窗体中显示为treelist,我想当权限为勾选时,菜单前面也自动显示为勾选,该怎么实现? 解决方案 本帖最后由 forevermini 于 2016-05-28 16:55:20 编辑解决方案二:各位

PPT演示文稿中图片文件大小怎么设置

  PPT演示文稿中图片文件大小怎么设置            1.启动PowerPoint 2013并打开包含图片的演示文稿,在幻灯片中选择需要压缩的图片.在"图片工具-格式"选项卡的"调整"组中单击"压缩图片"按钮打开"压缩图片"对话框,在"压缩选项"栏和"目标输出"栏中根据需要选择相应的选项,如图1所示.然后单击"确定"按钮关闭"压缩图片"对

Word2007文档中隐藏文字怎么设置

  Word2007中隐藏文字方法 ①选中需要隐藏的文字内容,然后单击"开始"选项卡中的"字体"选项组旁边的"字体"按钮; 文档中隐藏文字怎么设置-word文档隐藏文字"> ②在弹出的"字体"对话框中我们勾选"效果"下面的"隐藏",然后确定即可隐藏文字. Word2007中显示隐藏文字 设置了隐藏文字,那么我们以后又该如何将这些文字显示出来呢? ①单击"Offi

EXCEL中如何设置勾选框

打开EXCEL2010,点击"开始"->"选项",打开EXCEL选项对话框,选择"自定义功能区",在右侧打开自定义功能区页面. 在EXCEL的默认设置中,一般是不会勾选"开发工具"这一选项的.我们要把其勾选上,并点击"确定"按钮,这样在EXCEL窗口中就会出现"开发工具"选项卡. 选择要添加复选框的单元格,点击"插入"处的倒三角,就会弹出很多的可以插入的控件.

checkboxclumn-在dgv中设置了一列checkboxcolumn,怎么判断这个勾选框是被打钩了的

问题描述 在dgv中设置了一列checkboxcolumn,怎么判断这个勾选框是被打钩了的 怎么判断勾选框被选中了,我想要勾选多个,然后对多个行的数据进行处理,找不到事件..求大神解惑 解决方案 这个不是事件的,是遍历哦Row,Row[i].Cells[j]来判断

图片-设置树节点为勾选状态,求快速解答

问题描述 设置树节点为勾选状态,求快速解答 解决方案 treeObj是什么类型? 参考http://blog.csdn.net/wangpingfang/article/details/7174540 解决方案二: 你用的树形js控件是什么呢?到官网找Ddemo或者API,一般的树形展示控件都是简单易学.易用的. 解决方案三: 再仔细看看自己所用的树形控件 解决方案四: ztree树节点有一个checked属性 解决方案五: 请参考官方API:http://www.ztree.me/v3/api

VB.net TREEVIEW是通过check来勾选 怎么来获取第N层所有勾选的节点

问题描述 VB.netTREEVIEW是通过checkbox来勾选勾选到的节点显示到datagridview 解决方案 解决方案二:可以通过控件的属性来判断

checkbox设置复选框的只读效果不让用户勾选_javascript技巧

在Web开发中,有时候需要显示一些复选框(checkbox),表明这个地方是可以进行勾选操作的,但是有时候是只想告知用户"这个地方是可以进行勾选操作的"而不想让用户在此处勾选(比如在信息展示页面),这时候就需要将复选框设置成只读的效果. 提到只读,很容易想到使用readonly属性,但是对于复选框来说,这个属性和期望得到的效果是有差别的.原因在于readonly属性关联的是页面元素的value属性(例如textbox,设置了readonly就不能修改输入框的文本内容),而复选框的勾选/