如题.是二叉树,想找到其中一个节点并选中,但是断点跟踪,总是在第一个根节点执行,陷入死循环.请大虾们帮忙看下,是哪里的代码出错了.谢谢.

|-a1 
|-a2 
|-a3 
|-a4 
|-.. 

|-b1 
|-b2 
|-b3 
|-b4 
|-.. 如果二级节点的value=传递来的ID值,那么该接点被选中.(不找根接点)   private  void ShowAllNodes(TreeNodeCollection nodes)
         {
             foreach (TreeNode node in nodes)
             {
                 string  a="节点名: " + node.Value ;
                 string  b="\r\n节点Text:" + node.Text;
                 string  c= "\r\n子节点个数:" + node.ChildNodes.Count.ToString();                 if (node.Value == this.lbID.Text.Trim())
                 {
                     TreeView1.SelectedNode.Value = node.Value ;//高亮显示节点    
                        node.Selected = true;
                     break;
                 }                  
                 else
                 {
                     ShowAllNodes(this.TreeView1.Nodes);               
                 }               
             }
         }调用:  ShowAllNodes(this.TreeView1.Nodes);   

解决方案 »

  1.   

    你这个递归方法肯定永远停留在第一个根节点上这样写:
    private  void ShowAllNodes(TreeNodeCollection nodes) 
            { 
                foreach (TreeNode node in nodes) 
                { 
                    string  a="节点名: " + node.Value ; 
                    string  b="\r\n节点Text:" + node.Text; 
                    string  c= "\r\n子节点个数:" + node.ChildNodes.Count.ToString();                 if (node.Value == this.lbID.Text.Trim()) 
                    { 
                        TreeView1.SelectedNode.Value = node.Value ;//高亮显示节点    
                            node.Selected = true; 
                        break; 
                    }                  
                    else 
                    { 
                        ShowAllNodes(node.ChildNodes);              
                    }              
                } 
            } 
      

  2.   

    foreach (TreeNode node in nodes) 
                { 
                    string  a="节点名: " + node.Value ; 
                    string  b="\r\n节点Text:" + node.Text; 
                    string  c= "\r\n子节点个数:" + node.ChildNodes.Count.ToString();                 if (node.Value == this.lbID.Text.Trim()) 
                    { 
                        TreeView1.SelectedNode.Value = node.Value ;//高亮显示节点    
                            node.Selected = true; 
                        break; 
                    }                  
                    else if(int.Parse(c)>0)
                    { 
                        ShowAllNodes(node.ChildNodes);              
                    }              
                } 
      

  3.   

    谢谢大家,参考楼上意见,我改了一下,果然跳出死循环了,不过当执行到
     if (node.Value == this.lbID.Text.Trim()) 
                    { 
                        TreeView1.SelectedNode.Value = node.Value ;//高亮显示节点    
                            node.Selected = true; 
                        break; 
                    }  的"TreeView1.SelectedNode.Value = node.Value ;//高亮显示节点  "   时,
    断点跟踪时显示系统提示"未将对象引用到对象的实例,使用“new”关键字创建对象实例"   把这句去掉,系统就执行过去了,但是节点没有被选中状态,没有颜色的变化,请问这是怎么回事
      

  4.   

    谢谢大家,好了,我把这个顺序给颠倒了一下,就好了.
    代码如下.
    if (node.Value == this.lbID.Text.Trim()) 
                    { 
                        TreeView1.SelectedNode.Value = node.Value ;//高亮显示节点    
                            node.Selected = true; 
                        break; 
                    }  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    现在结帖,来者有分,感谢支持.