2014-11-24 280 views
0

我在C#中创建递归查找方法Treeview,并且我想扩展精细节点的所有父节点。这是我的代码:在C#treeview中展开特定节点的所有父节点

private void RecursivFindNode(RadTreeNodeCollection nodes, string nodeName2Find) 
{ 
    foreach (RadTreeNode node in nodes) 
    { 
     if (node.Text.Contains(nodeName2Find)) 
     { 
      node.BackColor = Color.Yellow; 
      NodeExpand(node); 
     } 
     RecursivFindNode(node.Nodes); 
    } 

} 

private void NodeExpand(RadTreeNode nodeExpand) 
{ 
    while (nodeExpand != null) 
    { 
     nodeExpand.Expand(); 
     nodeExpand = nodeExpand.Parent; 
    } 
} 

但我发现了这个错误:

Collection was modified; enumeration operation may not execute. 

我知道我不能修改这在foreach loop的项目。那么我怎么能使它工作?

+0

为什么一个方法,按名称应该只是“找到”节点(或者说是一个*节点?),也扩大它们/它呢?让它只返回找到的节点。然后有第三种方法,称为“查找”,之后调用“扩展”。此外,将搜索文本作为输入参数可能会更好,而不是从隐蔽文本框中检索它(我认为)。最后,如果你仍然得到这个错误,你可能想要在foreach中实现第二个集合(例如使用Linq的'nodes.ToList()'),看看是否有帮助。 – Corak 2014-11-24 07:29:57

+1

尝试'foreach(var节点中的节点.OfType ().ToArray()' – Vlad 2014-11-24 07:49:49

+0

@Vlad谢谢!这是我的解决方案! – 2014-11-24 09:03:07

回答

1

那么作为@Vlad建议,我改变了我的foreach这样:

foreach (var node in nodes.OfType<RadTreeNode>().ToArray()) 

而现在一切工作正常。 :)

相关问题