ネタが枯渇警報を発令してしばらく経つ。
何とか続いている。
そんな中、今日はイベントについて話そうと思います。
.NETで開発していればイベントを使っていない人はそういないでしょう。
しかし、自分でイベントを定義して使っている人となると、そんなには多くないのかなと思っていますが、みなさんはどうでしょうか?
Excel2007などでは、別の配色にしようと思って定義済みのものをポインタで指すだけで、シート上の文字などの色が変化します。
決定ボタンを押したり、色をクリックして決定していなくても変化して、どうなるか分かるようになっています。
これと同じようなことをFormアプリケーションでやるとしたら、イベントを使います。
簡単な例で説明しますと、メインのフォーム1でDataGridView(dgv1とします)の色を決めるために、別のフォーム2を表示して、そこで決定するとします。
フォーム2ではラジオボタンが数個あり、それを切り替えることでdgv1の色が変わるとします。
目標はフォーム2を表示している最中にラジオボタンをクリックしたタイミングで後ろに表示されているフォーム1のdgv1の色を瞬時に変えたいとします。
やり方はいくつかあると思いますが、今回はイベントを使います。
まず、フォーム2でパブリックなイベントを定義します。
public event EventHandler RadioButtonChanged;
そして、フォーム1からフォーム2を呼び出すときに、このイベントにメソッドを登録します。
frmSetup frm2 = new frmSetup();
frm2.RadioButtonChanged += new EventHandler(this.dgv1_ChangingColor);
こんな感じです。
そして、フォーム2でラジオボタンの選択が変わった時のCheckedChangedイベントで
if(RadioButtonChanged != null)
{
RadioButtonChanged(this,new EventArgs());
}
このif文は何をしているのかというと、イベントに登録しているものがあれば、イベントを発信するということです。
このあたりのことは、実は以下の本にしっかりと書かれています。
C#によるプログラミングWindows 上 (マイクロソフト公式解説書)
最初の.NETのバージョン2002が出た時の本ではありますが、有益な情報がいろいろ載っています。
下巻もどうぞ。
C#によるプログラミングWindows 下 (マイクロソフト公式解説書)