0

StripButtonから継承するクラスがありLabelます。onClickメソッドをオーバーライドしました。このクラスのユーザーは、イベントも に割り当てますonClick eventhandler。オーバーライドされたメソッドが最後に起動されることに気付きました。オーバーライドされたメソッドが最初に起動するようにします。どうやってやるの?

4

1 に答える 1

1

ハンドラーのメソッドがUserControl で呼び出されるとClick、フォームの StripButtonのハンドラーが起動します。そのため、ハンドラー コードがフォームで実行される前にUserControl のコードを実行する場合は、UserControl のハンドラーで最後に呼び出します。逆に、ユーザー コントロールのコードの後に​​フォームのコードを実行する場合は、ユーザー コントロールのハンドラーで最初に呼び出します。base.OnClickOnClickOnClickClickbase.OnClickOnClickClickOnClickbase.OnClickOnClick

最も単純な例で説明するのがおそらく最も簡単です。

// Your UserControl.
class StripButton : Label
{
    protected override void OnClick(EventArgs e) {
        Console.WriteLine("This runs before the Click handler on the parent form.");
        base.OnClick(e);
        Console.WriteLine("This runs after the Click handler on the parent form.");
    }
}

// On your form.
private void stripButton1_Click(object sender, EventArgs e) {
    Console.WriteLine("stripButton1_Click on form");
}

これを実行すると、出力ウィンドウに次のように表示されます。

This runs before the Click handler on the parent form.
stripButton1_Click on form
This runs after the Click handler on the parent form.

うまくいけば、それはあなたの質問に答えます。

于 2013-07-20T07:01:59.260 に答える