イベントとイベント ハンドラ
更新 : 2007 年 11 月
一連のプロシージャが順番に実行されるのが Visual Studio プロジェクトであると思っているかもしれませんが、実際には、ほとんどのプログラムはイベントによって駆動されています。つまり、実行の流れを決定するのは、イベントと呼ばれる外部の事象です。
イベントは重要な出来事が発生したことをアプリケーションに伝えるシグナルです。たとえば、ユーザーがフォームのコントロールをクリックすると、フォームは Click イベントを発生させてイベントを処理するプロシージャを呼び出すことができます。イベントは、個別のタスクの通信も確立できます。たとえば、アプリケーションが、並べ替えタスクをメイン アプリケーションとは別に実行するとします。ユーザーが並べ替えを取り消した場合、アプリケーションは並べ替えプロセスに停止を指示するキャンセル イベントを送信できます。
イベントの用語と概念
このセクションでは、Visual Basic のイベントに関連して使用される用語と概念について説明します。
イベントの宣言
次の例に示すように、イベントはクラス、構造体、モジュール、およびインターフェイス内で Event キーワードを使用して宣言します。
Event AnEvent(ByVal EventNumber As Integer)
イベントの発生
イベントは、重要な出来事が発生したことを通知するメッセージと同じです。メッセージのブロードキャストの動作は、イベントの発生と呼ばれます。Visual Basic では、次の例に示すように RaiseEvent ステートメントを使用してイベントを発生させます。
RaiseEvent AnEvent(EventNumber)
イベントが発生する範囲は、イベントを宣言したクラス、モジュール、または構造体の内部に限られます。たとえば、派生クラスで基本クラスから継承したイベントを発生させることはできません。
イベント センダ
イベントを発生させる機能を持つオブジェクトがイベント センダです。イベント ソースとも呼ばれます。フォーム、コントロール、およびユーザー定義オブジェクトは、イベント センダの例です。
イベント ハンドラ
イベント ハンドラは、対応するイベントが発生したときに呼び出されるプロシージャです。シグネチャの一致する任意の有効なサブルーチンをイベント ハンドラとして使用できます。ただし、イベント ハンドラはイベント ソースに値を返すことができないため、関数をイベント ハンドラとして使用することはできません。
Visual Basic は、イベント ハンドラに対して、イベント センダ名、アンダースコア、およびイベント名を組み合わせた標準名前付け規則を使用します。たとえば、button1 という名前のボタンの Click イベントは Sub button1_Click という名前になります。
メモ : |
---|
独自のイベントのイベント ハンドラを定義する場合は、この名前付け規則を使用することをお勧めしますが、名前付け規則の使用は必須ではありません。任意の有効なサブルーチン名を使用できます。 |
イベントとイベント ハンドラの関連付け
イベント ハンドラを使用できるようにするには、Handles ステートメントまたは AddHandler ステートメントを使用してイベント ハンドラをイベントに関連付ける必要があります。
WithEvents ステートメントと Handles 句を使用すると、イベント ハンドラの指定を宣言できます。WithEvents で宣言されたオブジェクトが発生させたイベントは、このイベントの名前を指定する Handles 句を持つ任意のサブルーチンで処理できます。Handles 句はイベントをイベント ハンドラに関連付ける標準的な方法ですが、関連付けができるのはコンパイル時だけです。
AddHandler ステートメントと RemoveHandler ステートメントは、Handles 句よりも柔軟性があります。これらのステートメントを使用すると、実行時に 1 つ以上のイベント ハンドラに対してイベントを動的に接続および接続解除できます。また、WithEvents を使用してオブジェクト変数を宣言する必要はありません。ただし、WithEvents の使用には制限事項があります。詳細については、「WithEvents と Handles 句」を参照してください。
フォームやコントロールに関連付けられているイベントの場合、Visual Basic が空のイベント ハンドラを自動的にスタブとして作成し、それをイベントに関連付けることがあります。たとえば、デザイン モードでフォームのコマンド ボタンをダブルクリックすると、次のコードに示すように、Visual Basic はコマンド ボタンに対して空のイベント ハンドラと WithEvents 変数を作成します。
Friend WithEvents Button1 As System.Windows.Forms.Button
Protected Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
End Sub