解决方案 »

  1.   

    1、如果窗体控件有嵌套,直接遍历this.Controls是遍历不到嵌套的Cotrol的
         比方说,你的窗体上有一个Panel控件,Panel里面有两个TextBox,你直接遍历this.Controls只能遍历到Panel
         要遍历到Panel里面的控件,需要递归
    2、如果你的窗体不存在控件嵌套的情况,试试下面的代码(盲敲的,可能有错误)
     foreach (Control c in this.Controls)
                    {
                        if (c is TextBox)
                        {
                           TextBox txt = c as TextBoX
                             if(String.IsEmpty(txt.Text))
                              {
                                   flag = true;
                                  break;
                           }
                        }
                    }
      

  2.   

    我所有的textbox都在一个panel1里该怎么写递归啊?
      

  3.   

    确定你的textbox 不是其它控件的子控件。if ((c as Textbox) !=null && ((TextBox)c).Text == string.Empty)
      

  4.   

    一个panel中,那就
    foreach (Control c in panel1.Controls){
        //........
    }
      

  5.   

     LoopControls(this.Controls);
    public void LoopControls(Control container)
    {
     foreach (Control c in container.Controls)
                    {
                        if (c is TextBox)
                        {
                           TextBox txt = c as TextBoX
                             if(String.IsEmpty(txt.Text))
                              {
                                   flag = true;
                                  break;
                           }
                        }
    //递归
    if(c.HasChildren)
       LoopControls(c);
                    }
    }
      

  6.   

    我上面说了,是盲敲,可能有错误。就是String.IsNullOrEmpty这个
      

  7.   

    LoopControls(this.Controls);这句话提示有错误:LoopControls(System.Windows.Forms.Control)”最匹配的重载方法具有一些无效参数。参数“1”: 无法从“System.ComponentModel.IContainer”转换为“System.Windows.Forms.Control”
    大神帮忙看看是我哪里错了呢?
      

  8.   

    你应该在  if (c.GetType().Name.Equals("TextBox") && ((TextBox)c).Text == string.Empty) 这条代码上调试。自己动手才行。
      

  9.   

    如果这段代码运行在窗体里,这个this表示的是窗体而不是panel1,当然达不到你要的效果啦,最简单的办法就是把this改为panel1。
    但这样是治标不治本的,假如panel1里还有一个panel2,就不起作用了,最好的办法就是递归检索窗体中的所有控件,参考5楼的方案。
    另外,判断控件是不是TextBox,不要用那种比较类型名称的愚蠢办法,应该用is运算符,同样参考5楼。
      

  10.   

    你这个只是查找父控件为本窗体的,如果有其他panel里面的控件你这个就找不到了用HasChildren判断遍历所有控件
      

  11.   


            private void BindData(Control c)
            {
               //......
                if (c.HasChildren)
                {
                    foreach (Control control in c.Controls)
                    {
                        BindData(control);
                    }
                }
            }
      

  12.   

    谢谢亲爱的朋友们~请问,如果不仅不允许text为空,而且也不允许text的内容超出我access数据库中字段规定的长度,我应该怎么写代码?除了给每个控件加代码判断length,还有别的更好的方法吗?
      

  13.   

    嗯,我就是参照5楼大神提供的方法的~但是在调用这个函数LoopControls时出现了9楼所示的错误
      

  14.   

    代码盲敲,没试验。
    改成LoopControls(this)