【问题标题】:unchecked only all child node in treeview仅取消选中树视图中的所有子节点
【发布时间】:2013-04-30 21:11:17
【问题描述】:

我正在使用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;
}

现在

问题来了:

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

喜欢这张照片:

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

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

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

亲切的问候。

【问题讨论】:

  • 在您的示例中,您将如何取消选中节点 6?看来,如果你只清除根节点,你将永远无法清除根节点
  • @timmy :我不知道我的代码是否可行,但我知道这是可能的:D 所以你对我有什么想法吗? :(
  • 对我来说,看起来 SelectParents 正在递归地取消检查所有父节点,直到 node.Parent 为空。

标签: c# treeview treenode checked unchecked


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 2021-03-23
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多