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

2015 年 9 月 23 日 水曜日

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

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

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

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

1
2
3
4
5
6
7
8
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つにまとめる場合。

1
2
3
4
5
6
7
8
9
10
11
12
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つにまとめた方がコード量が少なく済む。

関連記事

コメント / トラックバック 1 件

  • 有難うございます より:

    散々調べて出来なかった分岐処理がやっと出来ました・・・・

    もっと体系的に勉強しないと身につかないですね・・・

コメントをどうぞ

トラックバック

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

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