2015 年 9 月 23 日 水曜日
よく使われるテクニックみたいなんですが、知らなかったのでメモ。
イベントハンドラは、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
散々調べて出来なかった分岐処理がやっと出来ました・・・・
もっと体系的に勉強しないと身につかないですね・・・