次の方法で共有


Visual Basic でイベントをサブスクライブして処理する方法

イベントとは、マウス クリックや与信限度額を超えたなどのアクションまたは発生であり、一部のプログラム コンポーネントによって認識され、応答するコードを記述できます。 イベント ハンドラーは、イベントに応答するために記述するコードです。

Visual Basic では、イベントを操作するための 2 つの側面があります。

  • イベントの発行 — クラスはイベントを宣言し、 RaiseEvent ステートメントを使用して興味深い問題が発生したときにイベントを発生させます。 これは、イベント ハンドラーを実際に呼び出す (呼び出す) ものです。
  • イベント サブスクリプション - プロシージャを特定のイベントのハンドラーとして識別することで、イベントをサブスクライブします。 これを行うには、 Handles 句と WithEvents 変数を使用するか、 AddHandler ステートメントを使用します。

Visual Basic のイベント ハンドラーは、 Sub プロシージャです。 コードでは、他の Sub プロシージャのように直接呼び出すことはありません。 代わりに、イベントパブリッシャーは、プロシージャがそのイベントを購読しているため、イベントが発生した際にプロシージャを呼び出します。

Visual Basic でイベントをサブスクライブする既定の方法は、 Handles 句を使用することです。 これは、統合開発環境 (IDE) でプログラムを実行するときに、デザイナーによってイベント ハンドラーが記述される方法です。 AddHandler ステートメントは、実行時にイベントを動的にサブスクライブするのに適しています。

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

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

Handlesを使用してイベントに登録するWithEvents

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

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

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

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

    次の例では、イベントを発生させるクラスを参照するイベントと WithEvents 変数を定義します。 イベント処理 Sub プロシージャでは、 Handles 句を使用して、処理するクラスとイベントを指定します。

    ' Example showing event handling with Handles and WithEvents
    Public Class EventPublisher
        Public Event SomethingHappened()
        
        Public Sub CauseEvent()
            ' Raise the event when something interesting happens
            RaiseEvent SomethingHappened()
        End Sub
    End Class
    
    Public Class EventSubscriber
        ' Declare a WithEvents variable
        Dim WithEvents eventObj As New EventPublisher
        
        ' Handle the event using Handles clause
        Public Sub ProcessHappen() Handles eventObj.SomethingHappened
            ' Insert code to handle somethingHappened event.
            Console.WriteLine("Event handled using Handles clause!")
        End Sub
        
        Public Sub TriggerEvent()
            eventObj.CauseEvent()
        End Sub
    End Class
    

AddHandler を使用してイベントをサブスクライブする

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

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

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

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

    ' Example showing event handling with AddHandler
    Public Class Timer
        Public Event TimerElapsed(ByVal message As String)
        
        Public Sub Start()
            ' Simulate timer elapsed
            RaiseEvent TimerElapsed("Timer has elapsed!")
        End Sub
    End Class
    
    Public Class Application
        Private appTimer As New Timer()
        
        Sub New()
            ' Use AddHandler to dynamically associate event handler
            AddHandler appTimer.TimerElapsed, AddressOf OnTimerElapsed
        End Sub
    
        Private Sub OnTimerElapsed(ByVal message As String)
            ' Insert code to handle timer elapsed event
            Console.WriteLine($"Handling timer event: {message}")
        End Sub
        
        Public Sub StartTimer()
            appTimer.Start()
        End Sub
    End Class
    

    RemoveHandler ステートメントを実行することで、イベント ハンドラーをイベントから関連付け解除できます。

こちらも参照ください