2

私が使用しているChildClassユーザーコントロールには、最終的にSystem.Web.UI.UserControlから継承する親クラスのチェーンがあります。

public BasestClass : AnotherClassExtendingUserControl
{
    private void Page_Load(object sender, EventArgs e)
    {
        // do some stuff
    }
}

public BaseClass : BasestClass
{
    // no Page_Load
}

チェーンの上位にある2つの親クラス、Page_Loadはprivateとマークされています。'middle'クラスは明らかにそれをオーバーライドしませんが、ChildClassユーザーコントロールのPage_Loadに何かを追加する必要があります。

public ChildClass : BaseClass
{
    // think I need to override Page_Load here,
    // but there is no acceptable method to override
}

ChildClassのPage_Loadに入るにはどうすればよいですか?そのコントロールには、BaseClassまたはBasestClassには存在しない、操作する必要のあるコントロールがあります。

4

2 に答える 2

2

Page_LoadまたはLoad)イベントは、OnLoadイベントメソッドの実行中に発生するため、ロジックをそこに移動することをお勧めします。OnLoad子クラスのメソッドをオーバーライドしても問題はありません。

于 2012-05-09T23:53:04.077 に答える
1

私はあなたのクラスをコピーし、2つのことを変更しました:

BasestClass : System.Web.UI.UserControl

BasestClass最終的にはから継承すると言ったので、それは何も変更しないはずですUserControl

BasestClass.Page_Loadにもこれを追加しました:

Response.Write("BasePage_Load");

今、あなたの問題を解決するために:

ChildClassにコンストラクターを追加し、Loadイベントのイベントハンドラーを追加できます。

public ChildClass()
{
        Load += new EventHandler(_Default_Load);
}

void _Default_Load(object sender, EventArgs e)
{
        Response.Write("Event Handler");
}

OnPreRenderをオーバーライドすることもできます。

protected override void OnPreRender(EventArgs e)
{
       base.OnPreRender(e);
       Response.Write("OnPreRender");
}

上記のすべてを実行すると、これは応答に出力されます。

Event Handler
BasePage_Load
OnPreRender

新しいコードの前にのPage_Loadメソッドがすでに実行されていることを確認したい場合は、それを実行する場所です。BasestClassOnPreRender

于 2012-05-09T23:42:22.667 に答える