【问题标题】:event handler for new class c#新类 c# 的事件处理程序
【发布时间】:2013-10-20 09:36:09
【问题描述】:

我做这门课:

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

【问题讨论】:

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


    【解决方案1】:

    您定义的 Button 不属于 Controls 集合,因此它仅呈现为 &lt;input&gt; 标记并且从未处理用于事件验证。

    请务必注意,要自动链接控件事件,它必须具有相同的 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

    【讨论】:

    • 你的坦克。 CreateChildControls 在我的代码中触发,但在结果中不显示任何按钮。我使用 btn.Visible = true 但不起作用
    • 这可能是因为您正在扩展TextBox。尝试扩展 Panel 代替(你也可以添加一个 TextBox 到它)
    • 另外您可能需要在PreRender中致电EnsureChildControls()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    相关资源
    最近更新 更多