Visual Basic でイベント ハンドラーを呼び出す方法

"イベント" とは、何らかのプログラム コンポーネントによって認識されるアクションまたは発生 (マウス クリックやクレジット限度額の超過など) であり、それらに対して応答するコードを記述することができます。 "イベント ハンドラー" とは、イベントに応答するために記述するコードです。

Visual Basic のイベント ハンドラーは Sub プロシージャです。 ただし、通常は、これを他の Sub プロシージャと同じ方法で呼び出すことはありません。 代わりに、プロシージャをイベントのハンドラーとして指定します。 これを行うには、Handles 句と WithEvents 変数を使用することも、AddHandler ステートメントを使用することもできます。 Handles 句の使用が、Visual Basic でイベント ハンドラーを宣言する場合の既定の方法となります。 統合開発環境 (IDE) でプログラミングする場合、デザイナーではこの方法を使用してイベント ハンドラーが記述されます。 AddHandler ステートメントは、実行時にイベントを動的に発生させるのに適しています。

イベントが発生すると、イベント ハンドラー プロシージャが Visual Basic によって自動的に呼び出されます。 イベントへのアクセス権を持つコードいずれも、RaiseEvent ステートメントを実行することによってそれを発生させることができます。

複数のイベント ハンドラーを同じイベントに関連付けることができます。 場合によっては、ハンドラーとイベントとの関連付けを解除することができます。 詳細については、「イベント」を参照してください。

Handles と WithEvents を使用してイベント ハンドラーを呼び出す

  1. Event ステートメントを使用してイベントが宣言されていることを確認します。

  2. WithEvents キーワードを使用して、モジュール レベルまたはクラス レベルでオブジェクト変数を宣言します。 この変数の As 句で、イベントを発生させるクラスを指定する必要があります。

  3. イベント処理プロシージャ Sub の宣言内に、WithEvents 変数とイベント名を指定する Handles 句を追加します。

  4. イベントが発生すると、Sub プロシージャが Visual Basic によって自動的に呼び出されます。 コードでは、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 を使用してイベント ハンドラーを呼び出す

  1. Event ステートメントを使用してイベントが宣言されていることを確認します。

  2. AddHandler ステートメントを実行して、イベント処理プロシージャ Sub をイベントに動的に接続します。

  3. イベントが発生すると、Sub プロシージャが Visual Basic によって自動的に呼び出されます。 コードでは、RaiseEvent ステートメントを使用してイベントを発生させることができます。

    次の例では、コンストラクターの AddHandler ステートメントを使用し、OnFormClosing プロシージャを FormClosing のイベント ハンドラーとして関連付けます。

    Sub New()
        InitializeComponent()
        AddHandler Me.FormClosing, AddressOf OnFormClosing
    End Sub
    
    Private Sub OnFormClosing(sender As Object, e As FormClosingEventArgs)
        ' Insert code to deal with impending closure of this form.
    End Sub
    

    イベント ハンドラーとイベントの関連付けを解除するには、RemoveHandler ステートメントを実行します。

関連項目