Handles 句 (Visual Basic)
プロシージャが特定のイベントを処理することを宣言します。
proceduredeclaration Handles eventlist
指定項目
proceduredeclaration
イベントを処理するプロシージャの Sub プロシージャ宣言。eventlist
proceduredeclaration が処理するイベントの、コンマ区切りのリストです。現在のクラスに対する基本クラス、または WithEvents キーワードを使って宣言されているオブジェクトのどちらかが発生させるイベントを指定する必要があります。
解説
プロシージャ宣言の末尾にキーワード Handles を指定すると、そのプロシージャは、キーワード WithEvents を使って宣言されたオブジェクト変数が発生させるイベントを処理します。Handles キーワードは、基本クラスからのイベントを処理するために派生クラスで使用することもできます。
プロシージャのシグネチャは、eventlist の各イベントのシグネチャと一致している必要があります。
Handles キーワードと AddHandler ステートメントは、どちらも特定のイベントを特定のプロシージャで処理するよう指定する方法ですが、いくつか相違点があります。特定のイベントを処理するプロシージャを定義するときには、Handles キーワードを使用します。AddHandler ステートメントは、実行時にイベントをプロシージャに関連付けます。詳細については、「AddHandler ステートメント」を参照してください。
カスタム イベントの場合は、プロシージャがイベント ハンドラーとして追加されたときに、アプリケーションがイベントの AddHandler アクセサーを呼び出します。カスタム イベントの詳細については、「Event ステートメント」を参照してください。
使用例
Public Class ContainerClass
' Module or class level declaration.
WithEvents Obj As New Class1
Public Class Class1
' Declare an event.
Public Event Ev_Event()
Sub CauseSomeEvent()
' Raise an event.
RaiseEvent Ev_Event()
End Sub
End Class
Sub EventHandler() Handles Obj.Ev_Event
' Handle the event.
MsgBox("EventHandler caught event.")
End Sub
' Call the TestEvents procedure from an instance of the ContainerClass
' class to test the Ev_Event event and the event handler.
Public Sub TestEvents()
Obj.CauseSomeEvent()
End Sub
End Class
次に示すのは、派生クラスで Handles ステートメントを使って基本クラスからのイベントを処理する方法の例です。
Public Class BaseClass
' Declare an event.
Event Ev1()
End Class
Class DerivedClass
Inherits BaseClass
Sub TestEvents() Handles MyBase.Ev1
' Add code to handle this event.
End Sub
End Class
[WPF アプリケーション] プロジェクトに対する、2 つのボタンのイベント ハンドラーの例を次に示します。
Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click
MessageBox.Show(sender.Name & " clicked")
End Sub
Private Sub Button2_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button2.Click
MessageBox.Show(sender.Name & " clicked")
End Sub
次の例は、上の例と同じ意味になります。Handles 句の eventlist には、2つのボタンに対するイベントが含まれています。
Private Sub Button_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click, Button2.Click
MessageBox.Show(sender.Name & " clicked")
End Sub