我上课:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI;
namespace Class1
{
[
ToolboxData("<{0}:Class1 runat=\"server\"> </{0}:Class1>")
]
public class Class1 : TextBox
{
public Class1()
{
}
protected override void Render(HtmlTextWriter writer)
{
Button btn = new Button();
btn.Text = "Click me ... ";
btn.RenderControl(writer);
btn.Click += new EventHandler(btn_Click);
base.Render(writer);
}
protected void btn_Click(object sender, EventArgs e)
{
this.Text = DateTime.Now.ToLongTimeString();
}
}
}
但btn_Click
没有解雇的事件?
答案 0 :(得分:0)
您定义的Button
不属于Controls集合,因此它仅呈现为<input>
标记,并且从未处理过事件验证。
请务必注意,为了使控件事件自动链接,它必须具有相同的ID,并且必须由Load事件创建。为此,请覆盖CreateChildControls
方法并为其指定唯一ID。
private Button btn;
protected override void CreateChildControls()
{
base.CreateChildControls();
btn = new Button();
btn.ID = "btnClickMe";
btn.Text = "Click me ... ";
btn.Click += new EventHandler(btn_Click);
Controls.Add(btn);
}
private void btn_Click(object sender, EventArgs e)
{
this.Text = DateTime.Now.ToLongTimeString();
}
我还建议将按钮的引用存储为私有实例变量,以便于使用。
顺便说一句,您可能会发现扩展Panel
而不是TextBox
更容易,因为我不确定Button
将如何在TextBox
内呈现}
有关页面生命周期的更多信息: http://msdn.microsoft.com/en-us/library/ms178472(VS.100).aspx