C#winfrom 中 TreeView 控件中带checkbox,怎么实现在父节点上打勾,选中全部子节点?

来源:互联网 发布:mac 磁盘工具 恢复 编辑:程序博客网 时间:2024/04/30 10:22


//设置标志,防止死循环
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)

                {

                    node.Parent.Checked = false;
                    return;

               }
            }
        node.Parent.Checked = node.Checked;

       }

      else   node.Parent.Check = false;
    }
}

0 0
原创粉丝点击