最終更新:2015-04-28 (火) 03:03:23 (3279d)  

C♯/イベント処理
Top / C♯ / イベント処理

概要

C♯/イベント

  • プロパティのデリゲート版。
    class HogeClass
    {
      //public event デリゲート型 イベント;
      public event イベントハンドラ イベント;
    }
  • イベントハンドラはdelegate
  • イベントハンドラは〜EventHandlerという名前

イベントの登録/解除

  • クラス内部からは通常のデリゲート変数と同様に扱え、 外部からは +=、-= 演算子によるデリゲートの追加/削除のみを行える
    イベントハンドラ+=関数;
  • とするとイベントハンドラのデリゲートに関数が追加される

制約

  • イベント処理には、単なるデリゲート型のプロパティでは機能が不十分
    • 呼び出しはクラス内からのみ
    • 外部からできるのは登録・削除のみ
  • という制約が必要。

C♯/イベントハンドラ

  • イベントに使われるデリゲート型
    • イベントの引数の型などを定義。
     public delegate void EventHandler(object 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)

デリゲート

関連

参考