检查并取消选中c#中树视图的所有节点

时间:2011-05-27 07:13:48

标签: c# winforms treeview tabcontrol

我在我的Windows应用程序中的树视图和树形视图中有复选框,我有一些“父节点”和一些“子节点”,我想一次CHECK AND UNCHECK父节点和子节点单击“全部检查”和“取消全部选中”按钮...我该怎么做?

5 个答案:

答案 0 :(得分:17)

尝试这样的事情:

public void CheckAllNodes(TreeNodeCollection nodes)
{
    foreach (TreeNode node in nodes)
    {
        node.Checked = true;
        CheckChildren(node, true);
    }
}

public void UncheckAllNodes(TreeNodeCollection nodes)
{
    foreach (TreeNode node in nodes)
    {
        node.Checked = false;
        CheckChildren(node, false);
    }
}

private void CheckChildren(TreeNode rootNode, bool isChecked)
{
    foreach (TreeNode node in rootNode.Nodes)
    {
        CheckChildren(node, isChecked);
        node.Checked = isChecked;
    }
}

答案 1 :(得分:2)

尝试

private void CheckUncheckTreeNode(TreeNodeCollection trNodeCollection, bool isCheck)
        {
            foreach (TreeNode trNode in trNodeCollection)
            {
                trNode.Checked = isCheck;
                if (trNode.Nodes.Count > 0)
                    CheckUncheckTreeNode(trNode.Nodes, isCheck);
            }
        }

在按钮点击事件中将treeView.Nodes传递给此函数,例如CheckUncheckTreeNode(trView.Nodes, true);,以检查所有节点。要取消选中,请执行CheckUncheckTreeNode(trView.Nodes, false);

答案 2 :(得分:0)

对于ASP.NET WEB APPLICATION:

Button_Click() {
    CheckUncheckTreeNode(YourTreeView.Nodes, false);
}

private void CheckUncheckTreeNode(TreeNodeCollection trNodeCollection, bool isCheck) {
    foreach (TreeNode trNode in trNodeCollection) {
        trNode.Checked = isCheck;
        if (trNode.ChildNodes.Count > 0)
            CheckUncheckTreeNode(trNode.ChildNodes, isCheck);
    }
}

答案 3 :(得分:0)

{{1}}

答案 4 :(得分:-1)

当我偶然发现一个类似的问题时,我找到了一个整洁而简单的解决方案。是的,已经8年了,但是也许有人可以利用它。

每当选中一个TreeNode时,就将此TreeNode存储在一个列表中。当需要取消选中所有节点时,循环列表并取消选中节点。这样,您只需迭代受影响的节点。

示例:


选中后将TreeNodes存储在列表中

public List<TreeNode> checkedNodes;

private void treeView1_afterCheck(object sender, TreeViewEventArgs e)
{
    foreach(TreeNode node in treeView1.Nodes)
    {
    if(node.checked) {
        checkedNodes.Add(node);
    }
}

仅迭代选中的节点以取消选中所有

public void UncheckAllNodes()
{
    foreach (TreeNode node in checkedNodes)
    {
        node.Checked = false;
    }
}

在取消选中复选框时,它仍然缺少删除项,但是您知道了。