我在TreeView列表中处理节点,子节点,子节点;更不用说,复选框。我的目标是选择/检查多个节点,并且只需单击一个按钮即可执行链接到独占代码的每个节点。我已经考虑过使用带有switch和if语句的foreach语句。 Foreach 循环遍历树视图的节点, if 检查节点是否已选中,切换以浏览匹配的案例值已检查的节点。这是我的想法,但我觉得那里有一个更好的想法。有人可以验证下面的程序或提供更简单,更清洁的版本吗?
我的想法:这样做:
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 ++(但只是基础知识,仅适用于学校的一些练习和项目)。
答案 0 :(得分:2)
如果我理解正确,您可以拥有未定义的分层深度节点。在这种情况下,您需要执行递归:
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);
}