WithEvents と Handles 句
更新 : 2007 年 11 月
WithEvents ステートメントと Handles 句を使用すると、イベント ハンドラの指定を宣言できます。WithEvents キーワードで宣言されたオブジェクトが発生させたイベントは、次の例に示すように、そのイベントの Handles ステートメントを持つ任意のプロシージャで処理できます。
' Declare a WithEvents variable.
Dim WithEvents EClass As New EventClass
' Call the method that raises the object's events.
Sub TestEvents()
EClass.RaiseEvents()
End Sub
' Declare an event handler that handles multiple events.
Sub EClass_EventHandler() Handles EClass.XEvent, EClass.YEvent
MsgBox("Received Event.")
End Sub
Class EventClass
Public Event XEvent()
Public Event YEvent()
' RaiseEvents raises both events.
Sub RaiseEvents()
RaiseEvent XEvent()
RaiseEvent YEvent()
End Sub
End Class
多くの場合、イベント ハンドラに最も適しているのは WithEvents ステートメントと Handles 句です。これは、WithEvents ステートメントと Handles 句が使用する宣言構文によってイベント処理のコーディング、読み取り、およびデバッグが簡単になるためです。ただし、WithEvents 変数の使用には以下の制限があります。
WithEvents 変数を、オブジェクト変数として使用することはできません。つまり、この変数をオブジェクト型 (Object) として宣言することはできません。変数を宣言するときは、クラス名を指定する必要があります。
共有イベントはクラスのインスタンスに関連付けられないため、WithEvents を使用して、共有イベントを宣言によって処理することはできません。同様に、WithEvents または Handles を使用して、イベントを Structure から処理することもできません。どちらの場合にも、AddHandler ステートメントを使ってそれらのイベントを処理するようにしてください。
WithEvents 変数の配列は作成できません。
WithEvents 変数では、1 つのイベント ハンドラが 1 つ以上の種類のイベント、または 1 つ以上のイベント ハンドラが同じ種類のイベントを処理することも可能です。