form 上 有 20个 textbox 控件  名字 从 txt1 到 txt20我这样写 想获取他们的值 并判断  结果提示 未将对象引用设置到对象的实例 for (int i = 0; i < 24; i++)
                {
                                        if (((TextBox)(this.Controls["txtLimit" + (i + 1).ToString()])).Text.Trim() == "")
                    {
该如何写呢?

解决方案 »

  1.   


    Dim   objCTRLS   As   Control   
                
              For   Each   objCTRLS   In   Me.Controls   
                      If   TypeName(objCTRLS)   =   "txt1"   Then   
                              objCTRLS.Enabled   =   True   
                      Else   
                              On   Error   GoTo   NEXTCTRL   
                              objCTRLS.Enabled   =   False   
                      End   If   
               Next   objCTRLS   
      

  2.   


    我就是想取 这20个 textbox  text的值 需要这么麻烦么..........
      

  3.   

    this.Controls[]
    //[]中应该是int数据吧。不可以为String
      

  4.   

    foreach(Control  c  in  this.Controls)  
        {  
           if(c   is   TextBox&&c.Name=="txtLimit"+count.ToString())   
           {   
                    TextBox   txt=c   as   TextBox;   
                   
             }    
        }  
      

  5.   


    可以是 name  提示上有
      

  6.   

    使用this.FindControl("xxx"):for (int i = 0; i < 24; i++)
    {
       if (((TextBox)(this.FindControl("txtLimit" + (i + 1).ToString()))).Text.Trim() == "")
                        {
    .....
      

  7.   


    C#里 没有 findcontrol吧 只看到了 findform
      

  8.   

    虽然不知道如何解决 楼主的做法是有问题的txt1到txt20是你去的名字,里面的1怎么可以作为循环条件呢?vb里面有个控件数组,c#你面可能也有吧提供个思路
      

  9.   

    private AarryList InitializeControlList(Control.ControlCollection controls)
            {
                AarryList arrylist=new AarryList();
                try
                {                Queue<Control.ControlCollection> q = new Queue<Control.ControlCollection>();
                    q.Enqueue(controls);                while (q.Count > 0)
                    {
                        Control.ControlCollection controlss = (Control.ControlCollection)q.Dequeue();
                        if (controlss == null || controlss.Count == 0) continue;                    foreach (Control control in controlss)
                        {
                            q.Enqueue(control.Controls);
                            if (control is TextBox)
                            {
                                arrylist.add(control.Text);
                            }
                        }
                    }            }
                catch (System.Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
               return arrylist;
            }
      

  10.   

    C# 中有FindControl()方法啊,刚刚试的。
    在.cs文件中
        protected void Button1_Click(object sender, EventArgs e)
        {
            String str = "";
            TextBox  temp = (TextBox)this.FindControl("TextBox1");
            Label1.Text = temp.Text;
    ...
      

  11.   


       foreach (Control c in this.Controls)
                {
                    if (c.Name.IndexOf("txtLimit") != -1)
                    {
                        TextBox txt = c as TextBox;
                        MessageBox.Show(txt.Text);  
                    }
                } 
      

  12.   


    实在是看不出这样有什么用~~~你这样不等同 Label1.Text = TextBox1.Text 吗?