C# 中TreeView 控件实现点击CheckBoX自动打钩的事件

原创 2011年01月19日 15:37:00

自己想要做一个TreeView,点击节点的CheckBox能让其子节点及父节点做出相应的事件。

也不知道是不是自己的搜索方式不对,只能找到个近似的框架,通过自己修改以达到自己的要求。

现将自己的需求及代码贴上,希望能对有类似需求的同学们有帮助~~

 

要求:

1.父节点勾选,则子节点全部勾选;

2.父节点不勾选,则子节点全部不勾选;

3.子节点部分勾选,则父节点不勾选;

4.子节点全部勾选,则父节点被勾选;

 

就是这么一个简单的功能,自己改了1~2天,才把原先的一些问题解决,现在应该是能满足以上要求了~

 

    #region check选择事件

        private bool nextCheck(TreeNode n)   //判断同级的节点是否全选
        {
            foreach (TreeNode tn in n.Parent.Nodes)
            {
                if (tn.Checked == false)  return false;              
            }
            return true;
        }

        private bool nextNotCheck(TreeNode n)  //判断同级的节点是否全不选
        {
            if (n.Checked == true)
            {
                return false;
            }
            if(n.NextNode==null)
            {
                return true;
            }

            return this.nextNotCheck(n.NextNode);
        }

        private void cycleChild(TreeNode tn,bool check)    //遍历节点下的子节点
        {
            if (tn.Nodes.Count != 0)
            {
                foreach (TreeNode child in tn.Nodes)
                {
                    child.Checked = check;
                    if (child.Nodes.Count != 0)
                    {
                        cycleChild(child, check);
                    }
                }
            }
            else
                return;
        }

        private void cycleParent(TreeNode tn, bool check)    //遍历节点上的父节点
        {
            if (tn.Parent!=null)
            {
                if (nextCheck(tn))
                {
                    tn.Parent.Checked = true;
                }
                else
                {
                    tn.Parent.Checked = false;
                }
                cycleParent(tn.Parent, check);
            }
            return;
        }

        //     afterCheck
        private void treeViewTest_AfterCheck(object sender, TreeViewEventArgs e)    //当选中或取消选中树节点上的复选框时发生
        {
            //要求父节点被勾选,则子节点全部被勾选;父节点不被勾选,则子节点不全不被勾选
                if (e.Node.Checked == true)
                {
                    if (e.Action != TreeViewAction.Unknown)
                    {
                        cycleChild(e.Node, true);
                    }
                    if (e.Node.Parent != null)
                    {
                        if (nextCheck(e.Node))
                        {
                            cycleParent(e.Node,true);
                        }
                        else
                        {
                            cycleParent(e.Node, false);
                        }
                    }              
                }

                if (e.Node.Checked == false)
                {
                    if (e.Action != TreeViewAction.Unknown)
                    {
                        cycleChild(e.Node, false);  //中间节点不选中则子节点全部不选中
                        cycleParent(e.Node, false);       //父节点不选中
                    }
                    //bCheck = false;
                }
            return;
        }

        #endregion

 

至于TreeView 中加入CheckBox的话,只要把控件的属性 CheckBoxes改为True 就好了~~

 

代码写得很长,有什么不足的地方,欢迎指正。。。。

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

winform Treeview Checkbox选择事件

private void treeView1_MouseClick(object sender, MouseEventArgs e) { TreeNode node = treeView1....

treeView Checkbox选择事件

#region 鼠标点击事件&treeView Checkbox选择事件 private void treeView_MouseClick(object sender, MouseEv...

C#winform treeView checkbox全选反选

C#winform treeView checkbox全选反选 private void treeView1_AfterCheck(object sender, TreeViewEventArgs ...

C# treeview控件部分节点添加checkbox

转自:http://www.cnblogs.com/xiaolifeidao/p/3178569.html 一、先初始化treeview this.treeView...

C#WinForm如何在TreeView上面绑定checkbox

设置控件的CheckBoxes属性为true

关于TreeView中CheckBox的使用

项目设计中要使用TreeView中CheckBox(在TreeView的属性中的CheckBoxes设为ture)。想达到一个这样的效果:            1、选中一个节点,则子节点的状态为当前...

关于winform下treeview中CheckBox选择的方法

这几天在用winform写一个通用的菜单管理的类库文件,在测试代码时才发现winform下的treeview点击CheckBox时不会级联选中,真是郁闷,没办法就得自己控制级联选中的情况,为了满足自己...
  • Missna
  • Missna
  • 2010-04-22 22:30
  • 5128

C# TreeView CheckBox 代码挑勾选中

网上查了一溜够,实在没有满意的,只能自己整了一个,还挺好挺实用的 加入如下代码即可: 。。。 treeView1.BeforeCheck += (s, e) => { fu...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)