TreeView节点选择影响其父子节点选中状态(递归)

2 篇文章 0 订阅

1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Windows.Forms;
 9 
10 namespace MyNetShop
11 {
12     public partial class Form1 : Form
13     {
14         public Form1()
15         {
16             InitializeComponent();
17         }
18 
19         /**事件:树形状结构节点单击时 Added By  2010-2-25*/
20         private void treeView1_MouseClick(object sender, MouseEventArgs e)
21         {
22             //获取单击的节点
23             TreeNode root = treeView1.GetNodeAt(new Point(e.X, e.Y));
24             //该节点是否被选中
25             bool isChecked = root.Checked;
26 
27             if (root != null)
28             {
29                 //该节点的选中状态影响其子孙节点的状态
30                 FooChild(root, isChecked);
31                 //该节点的选中状态影响其父祖节点的状态
32                 FooParent(root);
33             }
34         }
35 
36         /**方法:递归子节点跟随其全选或全不选 Modify By 2010-2-25*/
37         private void FooChild(TreeNode node, bool isChecked)
38         {
39             node.Checked = isChecked;
40             foreach (TreeNode nd in node.Nodes)
41                 FooChild(nd, isChecked);
42         }
43 
44         /**方法:递归父节点跟随其全选或全不选 Add By 2010-2-25*/
45         private void FooParent(TreeNode root)
46         {
47             if (root.Parent != null)
48             {
49                 //兄弟节点被选的个数
50                 int brotherNodeCheckedCount = 0;
51                 //遍历该节点的兄弟节点
52                 foreach (TreeNode node in root.Parent.Nodes)
53                 {
54                     if (node.Checked == true)
55                         brotherNodeCheckedCount += 1;
56                 }
57                 //兄弟节点全没选
58                 if (brotherNodeCheckedCount == 0)
59                 {
60                     TreeNode parentNode = root.Parent;
61                     parentNode.Checked = false;//其父节点也不选
62                     FooParent(parentNode);
63                 }
64                 //兄弟节点中只要有一个被选
65                 if (brotherNodeCheckedCount == 1)
66                 {
67                     TreeNode parentNode = root.Parent;
68                     parentNode.Checked = true;
69                     FooParent(parentNode);//其父节点也被选
70                 }
71             }
72         }
73     }
74 }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值