2011年01月12日

C#のイベント

 C#では、クラスの内部で起きた事象を他のクラスに伝えるための機能が用意されています。これをイベントといいます。
人気ブログランキング
 デザインパターンでいうObserverパターンの代替となる機能です。Observerパターンでは事象が発生したときに呼び出されるメソッドは、インターフェースのメンバーである必要があるため、そのメソッド名を自由に決めることができません。一方でC#のイベントは自由に決められるので便利です。

 次のサンプルは、異なるフォームでボタンがクリックされたことを検知するものです。MainFormでmainButtonがクリックされるとSubFormが表示され、SubFormでボタンがクリックされると最終的にMainFormのSubForm_ButtonClickedが呼び出されます。

SubForm.cs
public partial class SubForm : Form
{
  // イベント。自分で追加。
  // ここにメソッドを登録可能。SubFormからは呼び出すことも可能。
  public event EventHandler<EventArgs> ButtonClicked;

  // SubFormのボタンがクリックされたときに実行
  // メソッドの外枠はMainFormのフォームデザイナで追加。
  // 中身は自分で入力
  private void subButton_Click(object sender,EventArgs e)
  {
    // nullでないことを確認し、メソッドとして呼び出し。
    if(ButtonClicked!=null) ButtonClicked(this,e);
  }
}

MainForm.cs
public partial class MainForm : Form
{
  // SubFormのボタンがクリックされたときに実行。
  // このメソッドは自分で追加する。
  void SubForm_ButtonClicked(object sender,EventArgs e)
  {
    MessageBox.Show("ボタンがクリックされました。");
  }
  
  // MainFormのボタンがクリックされたときに実行。
  // メソッドの外枠はMainFormのフォームデザイナで追加。
  // 中身は自分で入力
  void mainButton_Click(object sender,EventArgs e)
  {
    SubForm subForm=new SubForm();

    // イベントにメソッドを登録。
    // subButtonがクリックされたときに呼び出される。
    subForm.ButtonClicked+=this.SubForm_ButtonClicked;
    
    subForm.Show();
  }
}
web拍手 by FC2
posted by 北条利彦 at 20:43 | Comment(0) | TrackBack(0) | C# | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。