1. 程式人生 > >TreeView的複選框勾選

TreeView的複選框勾選

 如果勾選所有子節點,父節點也會勾選;如果某子節點取消勾選,則所有父節點也取消勾選”,下面的程式碼能全做到:

//設定標誌,防止死迴圈
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;
    }
}