>>>如何设置按钮事件? 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>
<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>
{
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是标记接口,你不需要为该接口编成。使用该接口,它会自动为你的容器内部的对象重新命名以避免重名。