如何通过单击按钮分别选中或取消选中所有父节点和子节点

本文关键字:父节点 子节点 取消 按钮 何通过 单击 | 更新日期: 2023-09-27 18:27:53

我有一个树视图,它有一些父节点和子节点。我有四个按钮。其中两个按钮属于已选中和未选中的仅父节点,两个按钮是子节点。如果单击btnAllParentChecked,则仅选中父节点;如果单击btnAllparentUnchecked,则不选中,对于子节点也是如此。我已经为子节点编写了一些代码。

Boolean bChildTrigger = true;
        Boolean bParentTrigger = true;
        private void CheckAllChildren(TreeNodeCollection trNodeCollection, Boolean bCheck)
        {
            bParentTrigger = false;
            foreach (TreeNode ctn in trNodeCollection)
            {
                bChildTrigger = false;
                ctn.Checked = bCheck;
                bChildTrigger = true;
                CheckAllChildren(ctn.Nodes, bCheck);
            }
            bParentTrigger = true;
        }
 private void btnAllPropertyChecked_Click(object sender, EventArgs e)
        {
            CheckAllChildren(treSelector.Nodes, true);
        }
private void btnAllPropertyUnChecked_Click(object sender, EventArgs e)
        {
            CheckAllChildren(treSelector.Nodes, false);
        }

如何在树视图中实现此功能?

如何通过单击按钮分别选中或取消选中所有父节点和子节点

这就是您所需要的。测试良好

private void ChangeNodesSelection(TreeNodeCollection node,bool doCheck)
    {
        foreach (TreeNode n in node)
        {
            n.Checked = doCheck;
            if (n.Nodes.Count > 0)
            {
                ChangeNodesSelection(n.Nodes,doCheck);
            }
        }
    }
private void UncheckParentNodes(TreeNodeCollection node)
    {
        foreach (TreeNode n in node)
        {
            if (n.Parent == null && n.Nodes.Count == 0)
                n.Checked = false;
        }
    }