2009 年 6 月 7 日 日曜日
よく使われるテクニックみたいなんですが、知らなかったのでメモ。
イベントハンドラは、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つにまとめた方がコード量が少なく済む。
このエントリーのトラックバックURL:
http://www.bmoo.net/archives/2009/06/312323.html/trackback
散々調べて出来なかった分岐処理がやっと出来ました・・・・
もっと体系的に勉強しないと身につかないですね・・・