4

ユーザーコントロールのライフサイクルの「プリロード」段階でコードを実行したいと思います。ただし、プリロード イベントは Page オブジェクトでのみ使用できます。そこで、次のメソッドをユーザー コントロールに追加しました。

Private Sub Page_PreLoad(ByVal sender As Object, ByVal e As System.EventArgs) Handles Page.PreLoad 

ただし、コンパイル エラーが発生することはわかっています。

Page プロパティは UserControl から継承されるため、これを簡単に行う方法がわかりません。

どんな助けもありがたく受け取った!

4

3 に答える 3

5

C# の例を挙げて申し訳ありませんが、VB での方法を思い出せません...

とにかく、UserControl の Init では、メソッド宣言で「Handles」構文を使用する代わりに、Page_PreLoad メソッドを UserControl の Page プロパティの PreLoad イベントのハンドラーとして明示的に割り当てることができます。あなたの例が行っていることは、UserControl オブジェクトが発生させないイベントの UserControl オブジェクトのイベントにイベント ハンドラーを割り当てようとしていることです。ご指摘のとおり、UserControl は PreLoad イベントが存在する Page から継承しません。ただし、UserControl には Page オブジェクトがそのプロパティの 1 つとして含まれているため、PreLoad はハンドラーを割り当てることができるイベントとして公開されます。とにかく、これはコンパイルして、探しているように聞こえます (C スタイルのコメントを使用して、WMD 構文の強調表示を保持します)。

Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
    // this assigns Page_PreLoad as the event handler 
    // for the PreLoad event of the Control's Page property
    AddHandler Me.Page.PreLoad, AddressOf Page_PreLoad
    MyBase.OnInit(e)
End Sub

Private Sub Page_PreLoad(ByVal sender As Object, ByVal e As System.EventArgs)
    // do something here
End Sub

それがあなたの目的に役立つかどうかはわかりません.Stephen Wrightonが上で示したように、ページライフサイクルのさまざまなイベントの1つを使用するより良い方法があるかもしれません. ただし、彼が言ったことに基づいて、これは機能するはずです。これは、イベント ハンドラーの割り当てが行われるコントロールの OnInit が呼び出され、次に Page の OnLoad イベントが発生し、コントロール内のイベント ハンドラーが実行されるためです。

于 2009-02-25T16:59:10.643 に答える
2

Jasonのオプションを使用しない限り、INITイベント(ビューステートがロードされる前)またはPAGELOADイベントでアクションを実行するのに行き詰まります。

私の質問は次のとおりです。LoadイベントではなくPreLoadでアクションを実行する必要がある理由はありますか?

プリロードが実際に行うのは、ViewstateデータとPostBackデータをさまざまなコントロールにロードすることだけです(ライフサイクルの詳細)。

LOADイベントは、コントロールイベント(ボタンのクリックなど)の前に発生するため、おそらくそこでアクションを実行するだけで問題ありません。唯一の理由は、PostBackまたはViewstateデータがプロセスに干渉しないようにする場合(考えられる理由は何であれ)であり、その場合はINITイベントを利用できます。

于 2009-02-25T16:40:32.467 に答える
0

プリロードを実行するために必要なメソッドを作成し、ページにそのメソッドを呼び出させてみませんか?

于 2009-02-25T16:33:02.470 に答える