Share via


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

イベントとは、なんらかのプログラム コンポーネントによって認識される動作または事象で、たとえば、マウス クリックやクレジットの上限への到達などがあります。このようなイベントに応答するためのコードを記述できます。イベント ハンドラーは、イベントに応答するために作成するコードです。

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

イベントが発生すると、Visual Basic はイベント ハンドラーのプロシージャを自動的に呼び出します。イベントにアクセスできるコードであればどこからでも、RaiseEvent ステートメント を実行してイベントを発生させることができます。

同じイベントに複数のイベント ハンドラーを関連付けることも可能です。場合によっては、ハンドラーをイベントから切り離すこともできます。詳細については、「イベント (Visual Basic)」を参照してください。

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

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

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

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

  4. イベントが発生すると、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 を使用してイベント ハンドラーを呼び出すには

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

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

  3. イベントが発生すると、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 ステートメントを実行すると、イベント ハンドラーをイベントから切り離すことができます。

参照

処理手順

方法: プロシージャを作成する (Visual Basic)

方法: 値を返さないプロシージャを呼び出す (Visual Basic)

関連項目

Sub ステートメント (Visual Basic)

AddressOf 演算子 (Visual Basic)

概念

Visual Basic におけるプロシージャ

Sub プロシージャ (Visual Basic)