WinForm下Treeview父节点子节点联动

工作上,当我们碰到Treeview,便要处理父子节点联动这一需求。以下是我写的一些代码。直接复用即可。当然大家若发现有不妥的地方,希望指正....
        private void treeView_XM_AfterCheck(object sender, TreeViewEventArgs e)
        {
            TreeNode treeNode = e.Node;
            this.treeView1.AfterCheck -= new System.Windows.Forms.TreeViewEventHandler(this.treeView_XM_AfterCheck);// 代码设置父子关系时候,禁止冒泡事件
            SetSonCheckState(treeNode);
            SetParentCheckedState(treeNode);
            this.treeView1.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.treeView_XM_AfterCheck);
        }

        protected void SetSonCheckState(TreeNode treeNode)
        {
            foreach (TreeNode tn in treeNode.Nodes)
            {
                tn.Checked = treeNode.Checked;
                SetSonCheckState(tn);
            }
        }

        /// <summary>        
        /// 根据子节点状态设置父节点的状态         
        /// </summary>         
        /// <param name="childNode"></param>        
        protected void SetParentCheckedState(TreeNode childNode)
        {
            TreeNode parentNode = childNode.Parent;
            if (parentNode != null)
            {
                if (!parentNode.Checked && childNode.Checked)
                {
                    int numChecks = 0;
                    for (int i = 0; i < parentNode.Nodes.Count; i++)
                    {
                        TreeNode tn = parentNode.Nodes[i];
                        if (tn.Checked)
                        {
                            numChecks++;
                        }
                    }
                    //此子节点和它所有兄弟节点都选中了
                    if (numChecks == parentNode.Nodes.Count)
                    {
                        parentNode.Checked = true;
                        SetParentCheckedState(parentNode);
                    }
                }
                else if (parentNode.Checked && !childNode.Checked)
                {

                    parentNode.Checked = false;
                    SetParentCheckedState(parentNode);
                }
            }
        }

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值