新类c#的事件处理程序

时间:2013-10-12 09:46:54

标签: c# asp.net events event-handling custom-controls

我上课:

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没有解雇的事件?

1 个答案:

答案 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