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...

Winform中DataGridView的复选框事件

// 复选框点击事件 private void dgvwPower_CellContentClick(object sender, DataGridViewCellEventArgs ...
  • windxxf
  • windxxf
  • 2011年09月26日 17:22
  • 5072

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

C#TreeView复选框的选择

树结构中的节点共有两层(父节点是分类名称子节点是属于该类的项的名称)都是从数据库中读出而且是在读出的过程中将具体的数据项名称进行分类的。要想实现:treeview的AfterCheck事件中的: ...

关于TreeView控件CheckBox选中事件

 做一个带复选框的TreeView控件,功能要实现父节点的复选框被选择,其子节点全部被选择,去除了全部子节点的选择时,父节点也自动去除.我想用javascript在客户端实现.请问在treeview控...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

PyQt4 tutorial读书笔记(7)-- Drag and Drop拖放

==拖放是图形用户界面的一部分。拖放操作让用户直观地做复杂的事情 ==通常,我们可以拖放两种事物:数据或一些图形对象。 ==如果我们把一个图像从一个应用程序拖到另一个地方,我们拖拽二进制数据。如果...

treeView Checkbox选择事件

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

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

转自:http://www.cnblogs.com/xiaolifeidao/p/3178569.html 一、先初始化treeview this.treeView...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C# 中TreeView 控件实现点击CheckBoX自动打钩的事件
举报原因:
原因补充:

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