イベントとは、マウス クリックや与信限度額を超えたなどのアクションまたは発生であり、一部のプログラム コンポーネントによって認識され、応答するコードを記述できます。 イベント ハンドラーは、イベントに応答するために記述するコードです。
Visual Basic では、イベントを操作するための 2 つの側面があります。
- イベントの発行 — クラスはイベントを宣言し、 RaiseEvent ステートメントを使用して興味深い問題が発生したときにイベントを発生させます。 これは、イベント ハンドラーを実際に呼び出す (呼び出す) ものです。
-
イベント サブスクリプション - プロシージャを特定のイベントのハンドラーとして識別することで、イベントをサブスクライブします。 これを行うには、
Handles句とWithEvents変数を使用するか、 AddHandler ステートメントを使用します。
Visual Basic のイベント ハンドラーは、 Sub プロシージャです。 コードでは、他の Sub プロシージャのように直接呼び出すことはありません。 代わりに、イベントパブリッシャーは、プロシージャがそのイベントを購読しているため、イベントが発生した際にプロシージャを呼び出します。
Visual Basic でイベントをサブスクライブする既定の方法は、 Handles 句を使用することです。 これは、統合開発環境 (IDE) でプログラムを実行するときに、デザイナーによってイベント ハンドラーが記述される方法です。
AddHandler ステートメントは、実行時にイベントを動的にサブスクライブするのに適しています。
イベントが発生すると、Visual Basic によってイベント ハンドラー プロシージャが自動的に呼び出されます。 イベントにアクセスできる任意のコードは、RaiseEvent ステートメントを実行することでイベントを発生させることができます。
同じイベントに複数のイベント ハンドラーを関連付けることができます。 場合によっては、イベントからハンドラーの関連付けを解除できます。 詳細については、「 イベント」を参照してください。
Handlesを使用してイベントに登録するWithEvents
イベントが Event ステートメントで宣言されていることを確認 します。
WithEventsキーワードを使用して、モジュールまたはクラス レベルでオブジェクト変数を宣言します。 この変数のAs句では、イベントを発生させるクラスを指定する必要があります。イベント処理
Subプロシージャの宣言で、Handles変数とイベント名を指定するWithEvents句を追加します。イベントが発生すると、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 を使用してイベントをサブスクライブする
イベントが
Eventステートメントで宣言されていることを確認します。AddHandler ステートメントを実行して、イベント処理
Subプロシージャをイベントに動的に接続します。イベントが発生すると、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 ClassRemoveHandler ステートメントを実行することで、イベント ハンドラーをイベントから関連付け解除できます。
こちらも参照ください
.NET