>>>如何设置按钮事件? where is the event handler? in the container page??a hack:1.TestClick.ascx:
<asp:Button id="Button1" Text="Click Me" runat="server" />2.TestClick.aspx:
<form runat="server" id="form1">
</form><script language="C#" runat="server">
void Page_Load(Object sender, EventArgs e)
{
  Control c = LoadControl("TestClick.ascx");
  Button b = (Button)c.FindControl("Button1");
  b.Click += new EventHandler(Button_Click);
  form1.Controls.Add(c);
}void Button_Click(Object sender, EventArgs e)
{
 Response.Write("button is clicked at " + DateTime.Now.ToString());
}
</script>but you should do something like1. TestClick.ascx:<%@Control Inherits="MyControl.TestClick" AutoEventWireup="false"%>
<asp:Button id="Button1" Text="Click Me" runat="server" />2. TestClick.ascx.cs:using System;
using System.Web.UI;
using System.Web.UI.WebControls;namespace MyControl
{
  public class TestClick : UserControl
  {
protected Button Button1;
public event EventHandler Click ; protected override void OnInit(EventArgs e)
{
Button1.Click += new  EventHandler(Button_Click);
}
void Button_Click(Object sender, EventArgs e)
{
  if (Click != null)
Click(sender, e);
}
  }
}3. TestClick.aspx:<form runat="server" id="form1">
</form><script language="C#" runat="server">
void Page_Load(Object sender, EventArgs e)
{
  MyControl.TestClick c = (MyControl.TestClick)LoadControl("TestClick.ascx");
  c.Click += new EventHandler(Button_Click);
  form1.Controls.Add(c);
}void Button_Click(Object sender, EventArgs e)
{
 Response.Write("button is clicked at " + DateTime.Now.ToString());
}
</script>

解决方案 »

  1.   

    建议封装在一个自己的服务器控件里:Class MyButtons : System.Web.UI.WebControls.WebControl, INamingContainer
    {
      protected override void CreateChildControls()
      {
        for (int i=1;i<9;i++)
        {
          Button b=new Button();
          //自行初始化该Button
          b.Click += new EventHandler(Button_Click);
          this.Controls.Add(b);
        }
      }
      void Button_Click(Object sender, EventArgs e)
      {
        //根据sender判断是哪个Button触发事件的
        //如果需要把事件冒泡上去就自行构造本服务器控件的事件逻辑
      }
    }INamingContainer是标记接口,你不需要为该接口编成。使用该接口,它会自动为你的容器内部的对象重新命名以避免重名。
      

  2.   

    问题解决,多谢saucer(思归/MVP) 。