1 //设置标志,防止死循环
2 bool check = false;
3 public void TV_AfterCheck(object sender, TreeViewEventArgs e)
4 {
5 if (check == false)
6 setchild(e.Node);
7 setparent(e.Node);
8 check = false;
9 }
10
11 //设置子节点状态
12 private void setchild(TreeNode node)
13 {
14 foreach (TreeNode child in node.Nodes)
15 {
16 child.Checked = node.Checked;
17 }
18 check = true;
19 }
20
21 //设置父节点状态
22 private void setparent(TreeNode node)
23 {
24 if (node.Parent != null)
25 {
26 //如果当前节点状态为勾选,则需要所有兄弟节点都勾选才能勾选父节点
27 if (node.Checked)
28 foreach (TreeNode brother in node.Parent.Nodes)
29 {
30 if (brother.Checked == false)
31 return;
32 }
33 node.Parent.Checked = node.Checked;
34 }
35 }