使用 foreach 语句和开关检查多个节点

Using foreach statement and switch for checked multiple nodes

我正在处理 TreeView 列表中的节点、子节点、子节点的子节点;更不用说复选框了。我的目标是 select/check 多个节点,每个链接到独占代码的节点只需单击一个按钮即可执行。我想过将 foreach 语句与 switch 和 if 语句一起使用。 Foreach循环遍历树视图的节点,if检查节点是否被选中,switch 浏览与选中节点匹配的案例值。这是我的想法,但我觉得还有更好的想法。有人可以验证下面的程序或提供更简单、更清晰的版本吗?

我的想法:这样做:

foreach (TreeNode rootNodes in treeView1.Nodes)
{
    foreach (TreeNode childNodes in rootNodes.Nodes)
    {
        if (childNodes.Checked == true)
        {
            switch (childNodes.Name.ToString())
            {
                case "Trial A":
                    //execute code for Trial A
                    MessageBox.Show("A"); //trial
                    break;
                case "Trial B":
                    //execute code for Trial B
                    MessageBox.Show("B"); //trial
                    break;
                case "Trial C":
                    //execute code for Trial C
                    MessageBox.Show("C"); //trial
                    break;
                default:
                    MessageBox.Show("error");
                    break;
            }
        }
    }
}

到目前为止,当我尝试这个时,它奏效了。当我选择多个节点时,每个节点的代码 运行 一次一个。实际上,让我有点高兴。问题出在我身上,我总觉得这个程序可能不正确,或者我以后可能会遇到问题。

我正在使用 VS 2005、.NET 2.0 在 WinForms 上工作。 旁注:我将 xml 文件解析为树视图列表。节点对应于 xml 文件中的对象。

另一个旁注:我还在学习。我是新手。绝对是 C# 新手。至于其他编程经验,我会一点C和C++(但只是基础,只是为了学校里的一些练习和项目)。

如果我理解正确的话,您可以有一个未定义的节点层次深度。在这种情况下,您需要执行递归:

foreach (TreeNode node in treeView1.Nodes) RecurseTree(node);

private void RecurseTree(TreeNode node)
{
    if (node.Checked == true)
    {
        switch (node.Name)
        {
            case "Trial A":
                //execute code for Trial A
                MessageBox.Show("A"); //trial
                break;
            case "Trial B":
                //execute code for Trial B
                MessageBox.Show("B"); //trial
                break;
            case "Trial C":
                //execute code for Trial C
                MessageBox.Show("C"); //trial
                break;
            default:
                MessageBox.Show("error");
                break;
        }
    }

    foreach (TreeNode childNode in node.Nodes) RecurseTree(childNode);
}