0

我做这门课:

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没有触发的事件?

4

1 回答 1

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顺便说一句,您可能会发现扩展 a而不是 a更容易,TextBox因为我不确定 aButton将如何在 a 内部呈现TextBox

有关页面生命周期的更多信息:http: //msdn.microsoft.com/en-us/library/ms178472 (VS.100).aspx

于 2013-10-12T11:46:44.687 回答