TreeView中CheckBox的使用

要求如下:

1、判断同级节点是否全部选中,从第一个节点开始

2、判断同级节点是否全未选中,从第一个节点开始

3、如果该节点选中,则其子节点全部选中,反之亦然

4、如过该节点选中,则其父节点依次选中

5、如果该节点没有选中,且同级节点全未选中,则取消父节点

        #region 判断同级节点是否全部选中,从第一个节点开始
        private bool IsAllChecked(TreeNode tn)
        {
            if (!tn.Checked)
            {
                return false;
            }
            if (tn.NextNode == null)
            {
                return true;
            }
            return IsAllChecked(tn.NextNode);
        }
        #endregion

        #region 判断同级节点是否全未选中,从第一个节点开始
        private bool IsAllUnChecked(TreeNode tn)
        {
            if (tn.Checked)
            {
                return false;
            }
            if (tn.NextNode == null)
            {
                return true;
            }
            return IsAllUnChecked(tn.NextNode);
        }
        #endregion

        #region 如果该节点选中,则其子节点全部选中,反之亦然
        private void CheckAllChildNodes(TreeNode tn, bool Checked)
        {
            foreach (TreeNode tnChild in tn.Nodes)
            {
                tnChild.Checked = Checked;
                if (tnChild.Nodes.Count > 0)
                {
                    CheckAllChildNodes(tnChild, Checked);
                }
            }
        }
        #endregion

        #region 如过该节点选中,则其父节点依次选中
        private void SelectParent(TreeNode tn)
        {
            if (tn.Parent != null && !tn.Parent.Checked)
            {
                tn.Parent.Checked = true;
                if (tn.Parent.Parent != null)
                {
                    SelectParent(tn.Parent);
                }
            }
        }
        #endregion

        #region 如果该节点没有选中,且同级节点全未选中,则取消父节点
        private void CancelParent(TreeNode tn)
        {
            if (tn.Parent != null)
            {
                bool isCheck = false;
                foreach (TreeNode n in tn.Parent.Nodes)
                {
                    if (n.Checked == true)
                    {
                        isCheck = true;
                        break;
                    }
                }
                if (!isCheck)
                {
                    tn.Parent.Checked = false;
                    CancelParent(tn.Parent);
                }
            }
        }
        #endregion


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值