如何测试是否检查了TreeView节点和/或Nodes子节点?

Fuz*_*ans 3 c# treeview loops nodes winforms

我有一个带有TreeView列表的程序,该列表包含Nodes和带子节点。这些都具有复选框属性启用。我需要知道如何检查已检查的节点/节点子级。到目前为止,我已经能够成功测试父节点,但是没有子节点使用:

//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;   
                    }
                }
Run Code Online (Sandbox Code Playgroud)

我如何获得它来检查父节点以及子节点?我已经搜索过,但没有发现任何可以解决的问题。

Cri*_*scu 5

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

private static void MarkSelectedNodes(TreeNodeCollection nodes)
{
    foreach (TreeNode n in nodes)
    {
        if (n.Checked)
            n.BackColor = Color.Black;

        MarkSelectedNodes(n.Nodes);
    }
}
Run Code Online (Sandbox Code Playgroud)

并这样称呼它:

MarkSelectedNodes(treeView1.Nodes);
Run Code Online (Sandbox Code Playgroud)