首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试是否勾选了TreeView Nodes和/或Nodes子节点?

如何测试是否勾选了TreeView Nodes和/或Nodes子节点?
EN

Stack Overflow用户
提问于 2013-01-26 06:02:17
回答 4查看 4.7K关注 0票数 3

我有一个程序,它有一个包含节点的TreeView列表,以及带有子节点的节点。这些都启用了checkbox属性。我需要知道如何检查哪些节点/子节点被检查。到目前为止,我已经能够成功地测试父节点,但没有子节点使用:

代码语言:javascript
复制
//this  will turn black any node that is checked, doesn't affect the children though
    TreeNodeCollection nodes = this.treeView1.Nodes;
                foreach (TreeNode n in nodes)
                {
                    if (n.Checked)
                    {
                        n.BackColor = Color.Black;   
                    }
                }

如何让它检查父节点以及子节点?我已经找过了,但没有找到任何能帮我澄清这件事的东西。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-26 06:09:27

您可以定义一个递归函数来标记所有选定的项:

代码语言:javascript
复制
private static void MarkSelectedNodes(TreeNodeCollection nodes)
{
    foreach (TreeNode n in nodes)
    {
        if (n.Checked)
            n.BackColor = Color.Black;

        MarkSelectedNodes(n.Nodes);
    }
}

并这样称呼它:

代码语言:javascript
复制
MarkSelectedNodes(treeView1.Nodes);
票数 5
EN

Stack Overflow用户

发布于 2013-01-26 06:21:34

您还可以“展开”递归以提高性能并避免堆栈溢出:

代码语言:javascript
复制
private static void MarkSelectedNodes(TreeNodeCollection nodes)
{
    Stack<TreeNode> toProcess =
        new Stack<TreeNode>(nodes.OfType<TreeNode>());

    while (toProcess.Count != 0)
    {
        TreeNode node = toProcess.Pop();
        if (node.Checked)
            node.BackColor = Color.Black;

        foreach (TreeNode child in node.Nodes)
            toProcess.Push(child);
    }
}
票数 1
EN

Stack Overflow用户

发布于 2013-01-26 06:08:53

您需要在子节点中再下拉一层。同样的代码,只是另一个循环:

代码语言:javascript
复制
TreeNodeCollection nodes = this.treeView1.Nodes;
        foreach (TreeNode n in nodes)
        {
            foreach (TreeNode c in n.Nodes)
            {
                if (c.Checked)
                {
                    c.BackColor = Color.Gray;
                }
            }
            if (n.Checked)
            {
                n.BackColor = Color.Black;
            }
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14531041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档