システム開発・Webサイト構築 プラスラス

2007/9/13 木曜日

【.NET】イベントを動的に登録する

このエントリーを含むはてなブックマーク Yahoo!ブックマークに登録 Google ブックマーク del.icio.us

VB.NETやC#でユーザーがクリックしたタイミングで何か処理をしたいときなど、ユーザーとプログラムとの対話を実現したい場合は、イベントの仕組みを使います。

通常は、下図のようにVisual Studioの機能を利用してイベント処理用のコードを自動作成で作ります。

イベントの選択

この方法では、デザイナ上で配置したコントロールなどのプログラム実行時に存在するオブジェクトのイベントしか扱えません。

ところが、フォームやコントロールを動的に生成する場合などは、任意のタイミングでイベント発生時に呼ばれるメソッドを登録したいことがあります。

以下は、Button型の変数btn1がフォーム上に存在し、このボタンのクリックイベントを動的にメソッドと関連付けさせるサンプルです。

イベントハンドラとして実行されるメソッドを用意

ボタンがクリックされたときに以下のメソッドが実行されるようにします。

ここでは、イベント発生時に処理したい内容を記述します。

メソッド名は何でも構いませんが、引数の型と数は、イベントごとに決まっているので同じにする(またはその基本クラス)必要があります。

'VB.NETのサンプル

'クリックイベントで実行されるメソッド
Private Sub btn_Click(ByVal sender As System.Object, _
                      ByVal e As System.EventArgs)

   MsgBox("クリックされました。")

End Sub
//C#のサンプル
//クリックイベントで実行されるメソッド
void btn_Click(object sender, EventArgs e)
{
   MessageBox.Show("クリックされました。");
}

イベントハンドラとして機能するようにする

さて、実際に上記のメソッド(btn_Click)が、イベント発生時に呼び出されるようにするイベントの関連付けを登録したい場所で以下のように記述します。

'VB.NETのサンプル

AddHandler btn1.Click, AddressOf btn_Click
//C#のサンプル

btn1.Click += new EventHandler(btn_Click);

この行が実行されたあとボタンをクリックすると、ハンドラに書かれた処理が実行されるようになります。

イベントを解除する

逆に関連付けを解除したい場合は、以下のように記述します。

'VB.NETのサンプル

RemoveHandler btn1.Click, AddressOf btn_Click
//C#のサンプル

btn1.Click -= new EventHandler(btn_Click);

Filed under: C#,Programming,VB.NET — Nakai @ 20:14:46

コメントはまだありません »

コメントはまだありません。

この投稿へのコメントの RSS フィード。 TrackBack URL

コメントする

HTML convert time: 0.795 sec. Powered by WordPress