[c#]複数のコントロールで共通のイベントハンドラを呼び出すには

2009 年 6 月 7 日 日曜日

よく使われるテクニックみたいなんですが、知らなかったのでメモ。

イベントハンドラは、1コントロール1イベントハンドラという決まりはないので、複数のコントロールで1つのイベントハンドラを呼び出すことができる。

たとえば、異なる2つのボタンがあり、ボタンのクリックイベントで、テキストボックスの値をクリックしたボタンのNameプロパティの値にする場合。

個別にイベントハンドラを用意した場合のコード:

private void button1_Click(object sender, EventArgs e)
{
    this.textBox1.Text = button1.Name;
}
private void button2_Click(object sender, EventArgs e)
{
    this.textBox1.Text = button2.Name;
}

で、これを1つにまとめる場合。

private void button1_Click(object sender, EventArgs e)
{
    Button btn = null;
    // senderとbutton1の型が同じ場合
    if (sender.GetType() == this.button1.GetType())
    {
        // senderをButton型として扱う
        btn = (Button)sender;
        // テキストボックスの値をsenderのNameプロパティにする
        this.textBox1.Text = btn.Name;
    }
}

あとは、button2のクリックイベントにbutton1のクリックイベントを指定するだけ。

コード量は多くなりましたが、同じような処理をする複数のコントロールがある場合は、1つにまとめた方がコード量が少なく済む。

コメントをどうぞ

トラックバック

このエントリーのトラックバックURL:

http://www.bmoo.net/archives/2009/06/312323.html/trackback