イベントが発生した時にこれを捕捉し、それに応じた処理を行うようにするには、イベントハンドラ(メソッド)を作成して、これをイベントに追加(接続、登録)する必要があります。
ここでは具体的に、System.Windows.Forms名前空間のButtonコントロール「Button1」のClickイベントに、イベントハンドラ「Button1_Click」を追加する方法を説明します。なおすでにButton1はフォームに配置されているものとします。
まずは、Visual Studioを使用して行う方法を紹介します。
Visual Studio 2005からは、C#での方法と同じように、プロパティウィンドウでイベントハンドラを作成することもできます。
次に、Visual Studioを使わずに、手動で行う方法を説明します。
Friend WithEvents Button1 As System.Windows.Forms.Button
Private Sub Button1_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) End Sub
Private Sub Button1_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Button1.Click End Sub
private void Button1_Click(object sender, EventArgs e) { }
Button1.Click += new EventHandler(Button1_Click);
補足:Visual Studio 2005からは、コードエディタに「Button1.Click +=」と記述したところでTabキーを押すことにより、「new EventHandler(Button1_Click);」が自動的に書き足されます。この直後、「Button1_Click」の部分が選択状態になりますが、もしButton1_Clickメソッドが存在しなければ、ここでもう一度Tabキーを押すことにより、Button1_Clickを自動的に作成することができます。この方法でイベントハンドラを作成すれば、いちいちイベントハンドラのシグネチャを調べる必要がなく、簡単です。
最後に、プログラムが実行時にイベントにイベントハンドラを追加する方法を説明します。
Private Sub Button1_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) End Sub
AddHandler Button1.Click, AddressOf Button1_Click 'または、次のようにする 'AddHandler Button1.Click, New EventHandler(AddressOf Button1_Click)
「手動で行う方法」と同じです。
これには、「実行時にイベントハンドラを追加する」で紹介した方法を使用します。
例えば次のようにすると、Button1のClickイベントが発生した時に、Button1_ClickとButton1_1_Clickイベントハンドラの両方が呼び出されます。
AddHandler Button1.Click, AddressOf Button1_Click AddHandler Button1.Click, AddressOf Button1_1_Click
Button1.Click += new EventHandler(Button1_Click); Button1.Click += new EventHandler(Button1_1_Click);
同じイベントハンドラを複数追加すると、追加した回数だけそのイベントハンドラが呼び出されます。例えば次のようにすると、Button1が一回クリックされると、Button1_Clickが2回呼び出されます。
AddHandler Button1.Click, AddressOf Button1_Click AddHandler Button1.Click, AddressOf Button1_Click
Button1.Click += new EventHandler(Button1_Click); Button1.Click += new EventHandler(Button1_Click);
例えば、複数のButtonコントロールのClickイベントを一つのイベントハンドラに関連付けることができます。また、デリゲートが同じであれば、複数の別々のイベントを一つのイベントハンドラに関連付けることもできます。
これも、「実行時にイベントハンドラを追加する」で紹介した方法を使用します。
Button1またはButton2がクリックされた時にButton1_Clickが呼び出されるようにするには、次のようにします。
AddHandler Button1.Click, AddressOf Button1_Click AddHandler Button2.Click, AddressOf Button1_Click
Button1.Click += new EventHandler(Button1_Click); Button2.Click += new EventHandler(Button1_Click);
VB.NETの場合は、「手動で行う方法」で紹介したHandlesを使用して、次のようにすることもできます。
Private Sub Button1_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click End Sub
C#と、Visual Studio 2005以降のVB.NETの場合は、「Visual Studioを使用する方法」を使用することもできます。
プロパティウィンドウで「Click」を探し、右側のコンボボックスからイベントハンドラを選択します(イベントハンドラはすでに存在している必要があります)。例えば、Button2のClickイベントにButton1_Clickイベントハンドラを追加するには、このコンボボックスから「Button1_Click」を選択します。
イベントに追加されているイベントハンドラを削除するには、VB.NETではRemoveHandlerステートメントを、C#では-=演算子を使用します。
Button1のClickイベントからButton1_Clickイベントハンドラを削除して、Button1をクリックしてもButton1_Clickが呼び出されないようにするには、次のようにします。
RemoveHandler Button1.Click, AddressOf Button1_Click
Button1.Click -= new EventHandler(Button1_Click);
イベントにイベントハンドラが複数追加されている場合は、その数だけ削除しないと、イベントハンドラは呼び出されてしまいます。
イベントからイベントハンドラが完全に削除されている時に上記の方法でイベントハンドラを削除しようとしても、エラーが発生することはありません。
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。