C# 仅取消选中treeview中的所有子节点

C# 仅取消选中treeview中的所有子节点,c#,treeview,treenode,checked,unchecked,C#,Treeview,Treenode,Checked,Unchecked,我使用的是treeview,在选择父节点或子节点时,我使用从该代码表单选中和取消选中的所有子节点 private bool updatingTreeView; private void CheckChildren_ParentSelected(TreeNode node, Boolean isChecked) { foreach (TreeNode item in node.Nodes) { item.Checked = isChecked; i

我使用的是treeview,在选择父节点或子节点时,我使用从该代码表单选中和取消选中的所有子节点

private bool updatingTreeView;
private void CheckChildren_ParentSelected(TreeNode node, Boolean isChecked)
{
    foreach (TreeNode item in node.Nodes)
    {
        item.Checked = isChecked;

        if (item.Nodes.Count > 0)
        {
            this.CheckChildren_ParentSelected(item, isChecked);
        }
    }
}
private void SelectParents(TreeNode node, Boolean isChecked)
{
    //MessageBox.Show(node.Parent.ToString());
    if (node.Parent != null)
    {
        node.Parent.Checked = isChecked;
        SelectParents(node.Parent, isChecked);
    }
}
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
    if (updatingTreeView) return;
    updatingTreeView = true;
    CheckChildren_ParentSelected(e.Node, e.Node.Checked);
    SelectParents(e.Node, e.Node.Checked);
    updatingTreeView = false;
}
但是现在

问题是:


当我取消选中子节点时,我只希望取消选中树视图中的所有子节点

就像这张照片:

但在我的代码中,所有父项和子项(两者)都未选中

现在我想知道我怎么才能只取消选中treeview中的所有子节点

现在,如何更改此代码以修复此问题

问候。

“当我取消选中子节点时,我只希望在树视图中取消选中所有子节点。”

换句话说,您不想取消选中父节点

在这种情况下,仅在选择节点时调用SelectParents():

private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
    if (updatingTreeView) return;
    updatingTreeView = true;
    CheckChildren_ParentSelected(e.Node, e.Node.Checked);
    if (e.Node.Checked)
    {
        SelectParents(e.Node, e.Node.Checked);
    }
    updatingTreeView = false;
}

在您的示例中,如何取消选中节点6?似乎如果只清除根节点,就永远无法清除root@timmy:我不知道我的代码是否可行,但我知道这是可能的:D那么你对我有什么想法吗?:(对我来说,SelectParents似乎在递归地取消检查所有paretnts直到节点。Parent为null。