第6回 1.イベント

足し算プログラムを作ってわかったと思うのですが、C#では……というか、GUI(グラフ
ィカルインターフェース)アプリケーションではボタンが押されたなどというイベントに
対して行う処理を記述します。
これをイベントドリブン型とか、イベント駆動型といいます。
この、イベントが発生したときに呼び出されるメソッドを単にイベントと呼ぶことがあ
ります。
このイベントを使う、つまり、イベントが発生したときにメソッドを呼び出すために、
C#ではデリゲートという概念が追加されています。
デリゲートはメソッドを参照する型です。C/C++でいえば関数ポインタにあたります。
つまり、インスタンス化してあるメソッドを保持することが出来ます。
足し算プログラムでいえば、計算ボタンをクリックされたときに呼び出される、
private void button1_Click(object sender, EventArgs e)というメソッドをButtonク
ラスのClickイベントに保存というか、登録します(Wクリックすると、自動的にこのメ
ソッドを作成し、クリックイベントに登録します)
メソッドの引数が、objectとEventArgsであることに注目してください。
前者が送信元のオブジェクト、その次がイベント駆動時に渡されるパラメータになりま
す。
object+EventArgsという組み合わせは、C#でデフォルトのパラメータです。

と、まぁ、色々書きましたが、C#では、イベント発生時に実行されされるメソッドを登
録することが出来るというあたりを覚えておけばよいでしょう。
Wクリックで自動的に登録する、ということは、プログラマの手による登録も当然可能で
す。
足し算プログラムに、もう一つボタンを足してみましょう。
そのボタンを右クリックして、プロパティ画面を開き、上部にある稲妻マーク(?)を
クリックしてください。
ボタンのイベント発生時に呼び出されるメソッドを登録できます。
ためしに、Clickイベントクリックし、右側にある▼ボタンをクリックしてみましょう。
button1_Clickというメソッドが選択できるはずです。
button1_Clickを選択したら、実行してみてください。
新しく追加したボタンをクリックすると、計算ボタンと同じ動きをします。
二つのボタンで同一のイベントを使用することが出来ます。
ですので、ほぼ同じ動きをするイベントは、同一のイベントで処理することにより、同
じような処理をいくつも書かずにすみます。
異なるクラスで、同一のメソッドを保持できるというのが関数ポインタと異なるところ
でしょうか。
C++ Builderなんかではclosureという拡張キーワードを用意して対応していますが。

ちなみに、引数object+EventArgsというメソッドを作ってあげれば、プログラマが記述
したイベントも選択することが出来ます。
ためしに、
private void myEvent(object sender , EventArgs e )
{
}

とかいうメソッドを作ってみて、ボタンのクリックイベントに割り当ててみましょう。
ボタンのクリックイベント選択時にmyEventが選択できるはずです。
最終更新:2007年10月23日 12:45
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。