//設置標誌,防止死循環
bool check = false;
//節點勾選後事件,如果更改某壹節點狀態會自動觸發,所以在後面的方法中無需遞歸
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if(check==false)
setchild(e.Node);
setparent(e.Node);
check = false;
}
//設置子節點狀態
private void setchild(TreeNode node)
{
foreach (TreeNode child in node.Nodes)
{
child.Checked = node.Checked;
}
check = true;
}
//設置父節點狀態
private void setparent(TreeNode node)
{
if (node.Parent != null)
{
//如果當前節點狀態為勾選,則需要所有兄弟節點都勾選才能勾選父節點
if (node.Checked)
foreach (TreeNode brother in node.Parent.Nodes)
{
if (brother.Checked == false)
return;
}
node.Parent.Checked = node.Checked;
}
}