怎样调用一个 动态创建的用户自定义控件 里的某个方法或事件?protected void Page_Load(object sender, EventArgs e)
{
  var a = LoadControl("001.ascx");
  a.ID = "UC001";
  this.Controls.Add(a);
}protected void Button1_Click(object sender, EventArgs e)
{
     var a = this.FindControl("UC001");    //这里竟然为null
     想在这里调用PageLoad事件里创建的自定义控件001.ascx中的方法或者事件应该怎么做?
}

解决方案 »

  1.   

    不要再Page_Load()中加载,控件的Render是在page的Init事件里处理的,page_load的时候已经完成了Render了,所以,你的得到了null。动态加载控件的代码应该写到Page的OnInit事件里。
      

  2.   

    加入以下代码    protected override void OnInit(EventArgs e)
        {         var a = LoadControl("001.ascx"); 
             a.ID = "UC001"; 
             form1.Controls.Add(tb);         base.OnInit(e);
        }
      

  3.   

    给你查了一下资料,
    如果要在Page_Load中写需要做下面的步骤:
    方法一:
    <%@ Page Language="C#" %>
    <%@ Reference Control="~/Controls/Spinner.ascx" %>    
    <script runat="server">
    private ASP.Spinner Spinner1
     
    protected void Page_Load(object sender, EventArgs e)
    {
       Spinner1 = (ASP.Spinner)LoadControl("~/Controls/Spinner.ascx");  
    }protected void Button1_Click(object sender, EventArgs e)
    {
       PlaceHolder1.Controls.Add(Spinner1);   
    }
    </script><html>
    <head id="Head1" runat="server">
      <title>Load User Control Programmatically</title>
    </head>
    <body>
      <form id="form1" runat="server">
        <div>
          <asp:PlaceHolder runat="server" ID="PlaceHolder1" />
          <br />
          <asp:Button ID="Button1" runat="server" 
            Text="Click to Add User Control" 
            OnClick="Button1_Click" />
          <br />
          <br />
          <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
        </div>
      </form>
    </body>
      

  4.   

    补充一点你的那个控件对象必须设置为类内的public,否则无法调用,尤其你放到OnInit里面或者Load里面定义的对象a,拿外面更是没有办法就算类内部,其他的方法也没有办法调用它。
      

  5.   

            protected void Page_Load(object sender, EventArgs e) {
                if (IsPostBack) {
                    WebUserControl1 ctl = new WebUserControl1();                ctl.ID = "a";                this.Controls.Add(ctl);
                }
            }        protected void Button1_Click(object sender, EventArgs e) {
                Control c = this.FindControl("a");
            }
      

  6.   

    我遇到同样问题,通过一个按钮事件动态增加一个自定义控件成功了,但是在另一个按钮事件里要找到该自定义控件里的某个方法或事件,this.FindControl("a");总是为空。应该怎么实现???网上有说要用反射,不太明白。