6

AutoEventWireup属性がに設定されている場合false、イベントは手動で接続する必要があります。Page_PreInitしかし、私は発砲することができないようです。ワイヤーアップを遅らせるのではないかと思いますが(すでに過ぎてしまったらPage_PreInit)、他にどこにワイヤーアップを配置すればよいかわかりません。

例えば...

protected override void OnInit(EventArgs e)
{
    base.OnInit(e)
    PreInit += new EventHandler(Page_PreInit);
    Load += new EventHandler(Page_Load);
}

protected void Page_PreInit(object sender, EventArgs e)
{
    Response.Write("Page_PreInit event fired!<br>");  //this is never reached
}

protected void Page_Load(object sender, EventArgs e)
{
    Response.Write("Page_Load event fired!<br>");
}

上記のコードは、「Page_Loadイベントが発生しました!」という結果になります。表示されていますが、からは何もありませんPage_PreInitbase.OnInit(e)ワイヤーアップの前と後の両方を試しましたが、効果はありませんでした。

ここに示されているグラフは、OnInitメソッドが実際にはPreInitイベントの後に来ることを示しています。それを念頭に置いて、私OnPreInitは同じことをオーバーライドして実行しようとしました---効果はありません。

ここでのMSDNの記事では、にAutoEventWireup設定されている場合false、イベントはオーバーライドされた状態で接続できると明示的に示されていますOnInit。彼らが使用している例はです。もちろん、それは私と同じように機能しますが、これがイベントPage_Loadでは機能しないように思われることについては言及していません。Page_PreInit

私の質問は、に設定さPage_PreInitれている場合、どうすればイベントを接続できますか?AutoEventWireupfalse

ページのコンストラクターを使用するなど、 MSDNページにリストされている代替手段があることを理解しています。彼らが提案するように具体的にどのように行うかを知りたいOnInitです。

4

2 に答える 2

10

OnPreInit()メソッドの基本実装は、イベントを発生させる役割を果たしPreInitます。オーバーライドはハンドラーを登録する前にその実装を呼び出すため、PreInit実際には呼び出されません。

ハンドラーを登録した、基本クラスのメソッドを呼び出してみてください。

protected override void OnPreInit(EventArgs e)
{
    PreInit += new EventHandler(Page_PreInit);
    Load += new EventHandler(Page_Load);

    // And only then:
    base.OnPreInit(e);
}
于 2012-08-07T08:17:20.137 に答える
0

初期化領域にすべてのイベントを追加します。

public WebName()
      {
         this.event+=TAB Key
      }
于 2016-02-06T11:45:28.340 に答える