我在asp.net 页面的 Panel 容器中自定义TextBox 控件,现在我要接收TextBox里的内容,怎么不都不行,请高手帮我看。这是显示让TextBox 显示在前台页面的代码: //自定义 TextBox 控件
 TextBox txtBox = new TextBox();  // 定义txtBox属性           
  txtBox.BorderStyle = BorderStyle.Groove;
  txtBox.Font.Size = 11;
  txtBox.Width = 200;
  txtBox.Height = 15  //把TextBox 添加的页面 Panel4 容器中
  this.Panel4.Controls.Add(txtBox);在后台接收 TextBox  内容:  for (int i = 0; i < FilNum; i++)
   {
  TextBox txtFil=(TextBox)this.Panel4.FindControl( string.Format("txtBox",i .ToString ())); //这个是错的 提示  string TxtAns =txtFil.Text; 没有实列化,但是实列化了也不行。
  TextBox txtFil = (TextBox)this.Panel4.Controls[0].FindControl("txtBox" +i .ToString ()); //错误和上面一样,   string TxtAns =txtFil.Text;
  
  // 添加答案
  this.FilMentAns.Add(TxtAns);
  MessageBox.Show(TxtAns.ToString());
  }

解决方案 »

  1.   

    显然没有txtBox0这个控件,你单写一行
     TextBox txtFil=(TextBox)this.Panel4.FindControl( string.Format("txtBox")); 
    看行不行
      

  2.   

    当你在aspx页面上用鼠标拖入一个TextBox,每一次页面回发而创建Page实例时都会自动创建这个对象。但是当你写...Panel4.Controls.Add(...)的代码,每一次回发而创建页面Page实例时这个Panel4的子集合里边根本没有这个TextBox(没有重建这个TextBox),asp.net也就根本无法把它的原来的所有状态以及客户端post的新的值填入相应控件。如果上一次已经创建了文本控件,那么下一次回发时你的“把TextBox 添加的页面 Panel4 容器中
    ”的代码就必须执行一次。我以前写过一个demo: http://topic.csdn.net/u/20091017/14/59b20718-7852-4827-8fea-f3a68dd83555.html
      

  3.   

    this.Panel4.Controls.Add(txtBox);这个控件添加到Panel4.Controls集合的最后边
    得到TextBox
    ,TextBox txtFil=(TextBox)this.Panel4.Controls[this.Panel4.Controls.length-1]
    ;
      

  4.   

    你的TextBox 指定ID了么  没有找到txtBox0 这个控件
      

  5.   

    //自定义 TextBox 控件
     TextBox txtBox = new TextBox();  // 定义txtBox属性   
      txtBox.ID="txtBox0";
      txtBox.BorderStyle = BorderStyle.Groove;
      txtBox.Font.Size = 11;
      txtBox.Width = 200;
      txtBox.Height = 15
      

  6.   

    将TextBox指定ID后,通过GridView中的FindControl()方法查找控件,或者将GridView中的每行通过foreach循环出来然后再找!