C# 新类c的事件处理程序#

C# 新类c的事件处理程序#,c#,asp.net,events,event-handling,custom-controls,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>")

我上这门课:

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();
    }
 }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.UI.WebControl;
使用System.Web.UI;
名称空间类别1
{
[
ToolboxData(“”)
]
公共类Class1:文本框
{
公共类别1()
{
}
受保护的覆盖无效渲染(HtmlTextWriter编写器)
{
按钮btn=新按钮();
btn.Text=“单击我…”;
btn.渲染控制(编写器);
btn.Click+=新建事件处理程序(btn\u Click);
base.Render(writer);
}
受保护的无效btn_单击(对象发送方,事件参数e)
{
this.Text=DateTime.Now.ToLongTimeString();
}
}
}

但是,
btn\u单击的事件
未触发?

您定义的
按钮
不属于控件集合,因此它仅呈现为一个
标记,并且从未进行过事件验证处理

需要注意的是,为了自动链接控件事件,控件事件必须具有相同的ID,并且必须由加载事件创建。为此,请重写
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();
    }
我还建议将对按钮的引用存储为私有实例变量,以使其更易于使用

另外,您可能会发现扩展
面板
比扩展
文本框
更容易,因为我不确定
按钮
文本框

有关页面生命周期的更多信息,请参见:

用于美国的储罐。CreateChildControls在我的代码中触发,但在结果中不显示任何按钮。我使用了btn.Visible=true,但不是work,这可能是因为您正在扩展一个
文本框。尝试扩展
面板
(您也可以向其中添加一个文本框),并且您可能需要在
PreRender中调用
EnsureChildControls()