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();
    }

ボタンへの参照をプライベート インスタンス変数として保存して、操作を簡単にすることもお勧めします。

余談ですが、 a が a の中でどのようにレンダリングされるかがわからないので、 a のPanel代わりに aを拡張する方が簡単だと思うかもしれませんTextBoxButtonTextBox

ページ ライフ サイクルの詳細については、http: //msdn.microsoft.com/en-us/library/ms178472 (VS.100).aspx を参照してください。

于 2013-10-12T11:46:44.687 に答える