GUIプログラミングでは、イベントが重要な働きをします。イベントなしでは、
GUIのプログラムは作れません。ここでは、コンソールアプリケーションでGUIの
プログラムを作るわけではありませんが、イベントの基礎について解説します。
まずは、イベントが発生したときに反応するイベントハンドラーをデリゲートで 定義しておきます。
delegate 戻り値の型 イベントハンドラの名前(パラメータリスト);これは、処理するイベントの種類だけ用意しておく必要があります。
次に、イベントを発生させるメソッドとイベントオブジェクトを準備しておく必要があります。たとえば、Clickに対して発生するイベントをclickとし、このイベントを発生させるメソッドをOnClickとします。イベント送信クラスは次のようになります。
class 送信クラス名 { public event イベントハンドラ名 イベント名; public 戻り値の型 Onイベント名(パラメータリスト) { if (イベント名 != null) イベント名(パラメータリスト); } }これを、具体的に書き直すと
class Click { public event EventHandler click; public void OnClick() { if (click != null) click(); } }という感じになります。イベントを送信するメソッドは通常On+イベント名で表しますが、 好きな名前でかまいません。
利用する側ではOnClickメソッドを呼び出すとclickイベントが送信され、これに対応した処理が実行されます。
イベントに対応する処理は、次のようにして決めます。
イベント名 += new イベントハンドラ名(メソッド名);イベントもマルチキャストすることができます。
ちょっと複雑ですが、実際の例を見てみましょう。
// event01.cs using System; // イベント用デリゲート(イベントハンドラ) delegate void EventHandler(); // イベント送信用のクラス class MyClick { // イベントオブジェクトの宣言 public event EventHandler myclick; // イベント送信用メソッド public void OnMyClick() { if (myclick != null) myclick(); } } class Show { public void show1() { Console.WriteLine("show1"); } public void show2() { Console.WriteLine("show2"); } } class event01 { public static void Main() { MyClick mc = new MyClick(); Show s = new Show(); // イベント名 += new イベントハンドラ(実行するメソッド); mc.myclick += new EventHandler(s.show1); // イベントを発生させる mc.OnMyClick(); Console.WriteLine("----------"); mc.myclick += new EventHandler(s.show2); mc.OnMyClick(); } }コメントと、解説と、プログラムを照らし合わせてみると、 それほど難しくはないですね。
このプログラムでは、イベントをマルチキャストしている点に注意してください。
では、実行結果を見てみましょう。
Update 22/Sep/2006 By Y.Kumei