0

すべてのコントロールで同じコードを使用するために、「panelDown」オブジェクトを取得する簡単な方法はありますか?

    private void panelDown_MouseHover(オブジェクト送信者, EventArgs e)
    {
        **panelDown**.BorderStyle = BorderStyle.FixedSingle;
    }

4

3 に答える 3

7

ニコが提案した方法で使用するのではなくas、次のようにキャストします。

private void panelDown_MouseHover(object sender, EventArgs e)
{
    var panel = (Panel) sender;
    panel.BorderStyle = BorderStyle.FixedSingle;
}

無条件に を変換する場合、間違った型を取得したかのようにキャストを使用することをお勧めします。間違った入力で an の結果を使用する場合にスローされる例外 ( ClassCastException) は、 a を取得するよりもはるかに明確です。NullReferenceExceptionas

(もちろん、ここで 2 つのステートメントを使用する必要はありませんそのほうがわかりやすいと思います。)

入力が異なるタイプであることが有効なas場合に使用し、正しいタイプである場合は条件付きでアクションを実行します。

イベント ハンドラーを手動で接続している場合は、もちろん、ラムダ式を使用する代わりに関連する変数を取得できます。

foo.MouseHover += (sender, args) => foo.BorderStyle = BorderStyle.FixedSingle;

または:

foo.MouseHover += delegate { foo.BorderStyle = BorderStyle.FixedSingle };
于 2012-07-13T08:02:14.130 に答える
1

Control にキャストsenderします (Panel の場合もあります)。

((Panel) sender).BorderStyle = BorderStyle.FixedSingle;
于 2012-07-13T08:01:29.203 に答える
1
private void panelDown_MouseHover(object sender, EventArgs e)
{
    (sender as Panel).BorderStyle = BorderStyle.FixedSingle;
}
于 2012-07-13T07:59:39.647 に答える