最終更新:2015-04-28 (火) 03:03:23 (3285d)
C♯/イベント処理
概要
- http://msdn.microsoft.com/ja-jp/library/awbftdfh.aspx
- .NET Frameworkクラス ライブラリでは、イベントは EventHandler デリゲートと EventArgs 基本クラスに基づいています。
C♯/イベント
- プロパティのデリゲート版。
class HogeClass { //public event デリゲート型 イベント; public event イベントハンドラ イベント; }
- イベントハンドラはdelegate型
- イベントハンドラは〜EventHandlerという名前
イベントの登録/解除
- クラス内部からは通常のデリゲート変数と同様に扱え、 外部からは +=、-= 演算子によるデリゲートの追加/削除のみを行える
イベントハンドラ+=関数;
- とするとイベントハンドラのデリゲートに関数が追加される
制約
- イベント処理には、単なるデリゲート型のプロパティでは機能が不十分
- 呼び出しはクラス内からのみ
- 外部からできるのは登録・削除のみ
- という制約が必要。
C♯/イベントハンドラ
- イベントに使われるデリゲート型
- イベントの引数の型などを定義。
public delegate void EventHandler(object sender, EventArgs e)
- EventHandler(sender, EventArgs e) - ベースとなるクラス。継承して使う。
イベントの登録
GUIでの登録
- Form1.cs
private void Form1_Load(object sender, System.EventArgs e) { // Add your form load event handling code here. }
- Form1.Designer.csのInitializeComponent メソッド内に、イベントをサブスクライブする必要があるコード行も自動生成される
this.Load += new System.EventHandler(this.Form1_Load);
プログラムを利用
- RaiseCustomEvent?はpublisherのイベントプロパティ(event)
- HandleCustomeEvent?は普通の関数
void HandleCustomEvent(object sender, CustomEventArgs a) { // Do something useful here. }
publisher.RaiseCustomEvent += HandleCustomEvent;
ラムダ式
this.Click += (s,e) => { MessageBox.Show( ((MouseEventArgs)e).Location.ToString());};
匿名メソッド
publisher.RaiseCustomEvent += delegate(object o, CustomEventArgs e) { string s = o.ToString() + " " + e.ToString(); Console.WriteLine(s); };
EventHandler
- イベント データを持たないイベントを処理するメソッドを表すデリゲート型
- public delegate void EventHandler(object sender, EventArgs e)