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 }