public void getTreeNode(TreeNodeCollection tn, string name)
        {
            //tn2 = null;
            foreach (TreeNode tree_node in tn)
            {
                if (tree_node.Text == name)
                {
                   MessageBox.Show(tree_node.Text);
                   tn2 = tree_node;
                   break;
                }
                    getTreeNode(tree_node.Nodes, name);
            }
        }
问什么会弹两个MessageBox
我用break return都会弹两个 
我想弹出一个后就退出函数 怎么做呢

解决方案 »

  1.   

    因为递归的问题,break或return只是退出当前的而不是上级 的
    public bool getTreeNode(TreeNodeCollection tn, string name)
            {
                if(getTreeNode(tree_node.Nodes, name)==true)
                  return true;
                else
                foreach (TreeNode tree_node in tn)
                {
                    if (tree_node.Text == name)
                    {
                       MessageBox.Show(tree_node.Text);
                       tn2 = tree_node;
                       return true;
                    }
                        
                }
                return false;
            }
      

  2.   

    你用了递归。
    当 Text != name,会进入 getTreeNode(tree_node.Nodes, name),所以会遇到两个 == name 也是很正常的。会弹两个MessageBox,应该 TreeNodeCollection 中至少有两个Text和name一样。你去看看是不是。
      

  3.   

    但是用break不能退出循环么。。
      

  4.   

     public bool getTreeNode(TreeNodeCollection tn, string name)
            {
               
                foreach (TreeNode tree_node in tn)
                {
                    if (getTreeNode(tree_node.Nodes, name) == true)
                        return true;
                    if (tree_node.Text == name)
                    {
                      MessageBox.Show(tree_node.Text);
                      return true;
                    }
                       
                }
                return false;
            }
      

  5.   

    public void getTreeNode(TreeNodeCollection tn, string name)
            {
                //tn2 = null;
                foreach (TreeNode tree_node in tn)
                {
                    if (tree_node.Text == name)
                    {
                       MessageBox.Show(tree_node.Text);
                       tn2 = tree_node;
                       return;
                    }
                        getTreeNode(tree_node.Nodes, name);
                         return;
                }
            }
      

  6.   

    但是当符合Text==name出现后 不是break么 break后为什么不退出函数 而是进入getTreeNode(tree_node.Nodes, name)呢
      

  7.   

    public bool getTreeNode(TreeNodeCollection tn, string name)
            {
                //tn2 = null;
                foreach (TreeNode tree_node in tn)
                {
                    if (tree_node.Text == name)
                    {
                       MessageBox.Show(tree_node.Text);
                       tn2 = tree_node;
                       return true;
                       //break;
                    }
                    else
                    {
                       getTreeNode(tree_node.Nodes, name);                }
                        
                }
            }