2

I'm using treeview , and I use from this code form checked and unchecked all Child Node when select parent or child node

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;
}

但现在

这是问题所在:

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

像这张照片:

已检查所有子节点

但是使用我的代码,所有父母和孩子(两者)都未选中!

所以现在我想知道如何只取消选中树视图中的所有子节点,

现在如何更改此代码以解决此问题?

亲切的问候。

4

1 回答 1

1

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

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

在这种情况下,仅在选择节点时调用 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;
}
于 2013-04-30T23:08:42.010 回答