AddHandler ステートメント

実行時にイベントをイベント ハンドラーに関連付けます。

構文

AddHandler event, {AddressOf eventhandler | expression }

指定項目

パーツ 説明
event 処理するイベントの名前。
eventhandler イベントを処理するプロシージャの名前。
expression イベントを処理するラムダ式。

パーツ AddressOf eventhandlerexpression は相互に排他的です。

Remarks

AddHandler および RemoveHandler ステートメントを使用すると、プログラムの実行中にいつでもイベント処理を開始および停止できます。

新しいイベント ハンドラー (eventhandler プロシージャまたは expression ラムダ) のシグネチャは、イベント event のシグネチャと一致する必要があります。

Handles キーワードと AddHandler ステートメントはどちらも特定のプロシージャで特定のイベントを処理するように指定できますが、両者には違いがあります。 AddHandler ステートメントは、実行時にプロシージャをイベントに接続します。 Handles キーワードは、プロシージャの定義時に特定のイベントを処理するよう指定する場合に使用します。 詳細については、「Handles」を参照してください。

明示的なラムダを使用して追加されたハンドラーは、後で削除できません (RemoveHandler を使用)。 実際、ラムダに名前が指定されていない場合、後でそれを参照することはできません。 しかし、ラムダを変数に代入し、この変数を使ってハンドラーを追加すると、この変数を使用してハンドラーを削除できます。

Note

カスタム イベントの場合は、AddHandler ステートメントによってイベントの AddHandler アクセサーが呼び出されます。 カスタム イベントの詳細については、「Event ステートメント」を参照してください。

Sub TestEvents()
    Dim Obj As New Class1
    ' Associate an event handler with an event.
    AddHandler Obj.Ev_Event, AddressOf EventHandler
    ' Call the method to raise the event.
    Obj.CauseSomeEvent()
    ' Stop handling events.
    RemoveHandler Obj.Ev_Event, AddressOf EventHandler
    ' This event will not be handled.
    Obj.CauseSomeEvent()
    ' Associate an event handler with an event, using a lambda.
    ' This handler cannot be removed.
    AddHandler Obj.Ev_Event, Sub ()
        MsgBox("Lambda caught event.")
    End Sub
    ' This event will be handled by the lambda above.
    Obj.CauseSomeEvent()
End Sub

Sub EventHandler()
    ' Handle the event.
    MsgBox("EventHandler caught event.")
End Sub

Public Class Class1
    ' Declare an event.
    Public Event Ev_Event()
    Sub CauseSomeEvent()
        ' Raise an event.
        RaiseEvent Ev_Event()
    End Sub
End Class

関連項目