C#(三)TreeView勾选菜单结点(CheckBoxes)的联动反应

一、效果图(整个项目源码

1、选择父结点,所有子节点自动勾选
在这里插入图片描述
2、取消父结点的选择,子节点也全部取消
在这里插入图片描述
3、勾选子节点,自动勾选所有祖先结点
在这里插入图片描述
4、子节点取消勾选,先判断该父结点下是否还有其他子节点被勾选,如果有则不取消,没有则取消。
在这里插入图片描述

二、实现

首先设置TreeView控件中的CheckBoxes为true,这样在显示菜单时每项菜单前会有一个勾选框。
在这里插入图片描述

private void editTreeView_AfterCheck(object sender, TreeViewEventArgs e)//勾选事件
        {
            if (e.Action == TreeViewAction.ByMouse)
            //当该事件是由鼠标点击触发时才发生,否则设置该结点的Checked为true也会导致该事件发生
            {
                if (e.Node.Checked)//勾选结点时
                {
                    setParentNodeChecked(e.Node);//勾选所有祖先结点
                    setChildNodeChecked(e.Node);//勾选所有子节点
                }
                else//取消勾选时
                {
                    setChildNodeCancel(e.Node);//取消所有子节点
                    setParentNodeCancel(e.Node);//处理祖先结点,需判断
                    
                }
            }
        }

        private void setChildNodeCancel(TreeNode node)//取消所有子节点的选择
        {
            foreach (TreeNode a in node.Nodes)
            {
                if (a != null)
                {
                    a.Checked = false;
                    setChildNodeCancel(a);
                }
            }
        }

        private void setParentNodeCancel(TreeNode node)//取消祖先结点选择
        {
            if(node.Parent!=null&& judegChildChecked(node.Parent))
            {
                TreeNode parent;
                node.Parent.Checked = false;
                parent = node.Parent;
                setParentNodeCancel(parent);
            }
        }

        private void setParentNodeChecked(TreeNode t)//选择所有祖先结点
        {
            TreeNode parent = t.Parent;
            while(parent!=null && parent.Checked == false)
            {
                parent.Checked = true;
                parent = parent.Parent;
            }
        }
        private void setChildNodeChecked(TreeNode t)//勾选所有子节点
        {
            
            foreach(TreeNode a in t.Nodes)
            {
                if (a != null)
                {
                    a.Checked = true;
                    setChildNodeChecked(a);
                }
            }
            
        }
        private bool judegChildChecked(TreeNode t)//判断其子节点是否有勾选状态
        {
            foreach(TreeNode a in t.Nodes)
            {
                if(a != null && a.Checked == true)
                {
                    return false;
                }
            }
            return true;
        }
  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: c是一个字母,是英语字母表中的第个字母。它的发音类似于"see",是一个辅音音素。在英语中,c可以单独使用,也可以与其他字母组合成不同的拼音。例如,和"a"组合可以形成"ca"、"ce"、"ci"、"co"、"cu"等不同的发音。在拼音中,"ch"和"c"的读音是不同的,"ch"的发音更接近于汉语中的"擦"的音。在汉语中,"c"是一个汉字的读音,比如"车"、"吃"、"厕所"等等。此外,在数学中,"c"在某些情况下也表示其他的含义,比如在代数中,"c"可以表示一个常数,如"c=2"表示"c"等于2。总之,"c"是一个常见的字母,在英语和汉语中都有不同的用法和含义。 ### 回答2: C是计算机科学中的一门编程语言,是由美国贝尔实验室的丹尼斯·里奇开发的。 C语言是一种结构化的编程语言,以其简洁、高效和灵活的特性而广泛应用于软件开发和系统编程领域。它是一种通用的编程语言,可以用来开发各种类型的应用和软件,包括操作系统、嵌入式系统、数据库、网络应用等。 C语言具有许多特点,使其成为编程人员的首选之一。首先,C语言具有高度的可移植性,可以在各种不同的计算机平台上运行,不需要重写代码。其次,C语言的语法规则简单,易于学习和理解,适合初学者入门。此外,C语言提供了丰富的库函数,可以简化程序开发过程,提高编程效率。 C语言还具有强大的控制能力和灵活性,可以直接访问计算机的底层硬件和操作系统,从而实现更高效、优化和精确的编程。它支持指针、结构体、位操作和内联汇编等特性,可以进行底层的内存管理和操作,提供了更多的控制和优化选择。 最后,C语言具有广泛的应用领域。它被广泛用于编写操作系统,例如UNIX、Linux和Windows等;用于嵌入式系统开发,如手机、汽车、家电等;还应用于游戏开发、网络编程和科学计算等领域。 总的来说,C语言是一种强大、灵活和通用的编程语言,被广泛应用于各个领域的软件开发。精通C语言对于计算机科学学习和职业发展都具有重要的意义。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值