更新 : 2007 年 11 月
イベントとは、なんらかのプログラム コンポーネントによって認識される動作または事象で、たとえば、マウス クリックやクレジットの上限への到達などがあります。このようなイベントに応答するためのコードを記述できます。イベント ハンドラは、イベントに応答するために作成するコードです。
Visual Basic では、イベント ハンドラは Sub プロシージャとして作成します。ただし、他の Sub プロシージャと同じ方法で呼び出すのではなく、通常はイベントに対するハンドラとしてこのプロシージャを指定します。これには Handles 句と WithEvents 変数を使うか、または AddHandler ステートメント を使います。Visual Basic の既定の方法では、Handles 句を使ってイベント ハンドラを宣言します。統合開発環境 (IDE) でプログラムを作成する場合は、この方法でイベント ハンドラを記述することになります。AddHandler ステートメントは、実行時にイベントを動的に発生させるのに適しています。
イベントが発生すると、Visual Basic はイベント ハンドラのプロシージャを自動的に呼び出します。イベントにアクセスできるコードであればどこからでも、RaiseEvent ステートメント を実行してイベントを発生させることができます。
同じイベントに複数のイベント ハンドラを関連付けることも可能です。場合によっては、ハンドラをイベントから切り離すこともできます。詳細については、「Visual Basic におけるイベント」を参照してください。
Handles と WithEvents を使用してイベント ハンドラを呼び出すには
イベントが Event ステートメント を使って宣言されていることを確認します。
WithEvents キーワードを使用して、オブジェクト変数をモジュール レベルまたはクラス レベルで宣言します。この変数の As 句では、イベントを発生させるクラスを指定する必要があります。
イベントを処理する Sub プロシージャの宣言で、WithEvents 変数とイベント名を指定する Handles 句を追加します。
イベントが発生すると、Visual Basic はこの Sub プロシージャを自動的に呼び出します。イベントを発生させるには、RaiseEvent ステートメントを使用してコードを記述します。
イベントの定義例と、イベントを発生させるクラスを参照する WithEvents 変数の定義例を次に示します。イベントを処理する Sub プロシージャでは Handles 句を使用して、クラスおよびプロシージャが処理するイベントが指定されています。
Public Class raisesEvent Public Event somethingHappened() Dim WithEvents happenObj As New raisesEvent Public Sub processHappen() Handles happenObj.somethingHappened ' Insert code to handle somethingHappened event. End Sub End Class
AddHandler を使用してイベント ハンドラを呼び出すには
イベントが Event ステートメントを使って宣言されていることを確認します。
AddHandler ステートメントを実行して、イベントを処理する Sub プロシージャをイベントに動的に関連付けます。
イベントが発生すると、Visual Basic はこの Sub プロシージャを自動的に呼び出します。イベントを発生させるには、RaiseEvent ステートメントを使用してコードを記述します。
次の例に定義された Sub プロシージャは、フォームの Closing イベントを処理します。次に、AddHandler ステートメントを使って catchClose プロシージャを Closing のイベント ハンドラとして関連付けています。
' Place these procedures inside a Form class definition. Private Sub catchClose(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) ' Insert code to deal with impending closure of this form. End Sub Public Sub formOpened() AddHandler Me.Closing, AddressOf catchClose End Sub
RemoveHandler ステートメントを実行すると、イベント ハンドラをイベントから切り離すことができます。