自定义控件:
MyControlFrm.ascx
private void page_Load()
{
   TextBox1.Text=DateTime.Now.ToString();
}为了说明问题,程序简化一下。主页面:
MainFrm.aspx
private void page_Load()
{
   MyControlFrm balfrm=(MyControlFrm)LoadControl("MyControlFrm.ascx"); 
   Page.Controls.Add(balfrm);
}发现除了第一次调用主页面后,TextBox1.Text获得了时间后,以后刷新主页面后,TextBox1.Text不再发生变化?
这是为什么?单点跟踪进入,发现TextBox1.Text得到了新的时间,可就是显示的时候,还是老时间,不变化!如果在自定义控件中加入一个按钮:
private void Button1_Click(object sender, System.EventArgs e)
{
   TextBox1.Text=DateTime.Now.ToString();
}
调用后,点击这个按钮,TextBox1.Text会发生变化!为什么控件页面中Page_Load在第一次调用后,无法再为TextBox1.Text赋值了?真不知道这是为什么?请高手指教!万分感谢!

解决方案 »

  1.   

    把自定义控件页面的TextBox1设成public,
    private void page_Load() 
    {
     MyControlFrm balfrm=(MyControlFrm)LoadControl("MyControlFrm.ascx"); 
     balfrm.TextBox1.Text="1111";
     Page.Controls.Add(balfrm);
    }
    这样也没法赋值!而且:string aaa=balfrm.TextBox1.Text;也无法取值。取出来的是空。
      

  2.   

    可以了。
    private void Page_PreRender(object sender, System.EventArgs e)
    {
      TextBox1.Text=DateTime.Now.ToString();
    }
    像上面一样把TextBox1.Text=DateTime.Now.ToString();放到自定义控件PreRender事件中就可以了!明白的解释一下为什么?
      

  3.   

    Init,Load,PreRender事件执行顺序:
    1)控件的Init事件
    2)控件所在页面的Init事件
    3)控件所在页面的Load事件
    4)控件的Load事件
    5)控件所在页面的PreRender事件
    6)控件的PreRender事件
     
    应该是第5步PreRender改掉了值,在控件的load里也写上代码,单步过去看下。