詳細情報 : イベント ハンドラを共有する
更新 : 2007 年 11 月
このレッスンでは、複数のコントロールのイベントを処理する共有イベント ハンドラを作成する方法について説明します。
前のレッスン「ユーザーに反応するプログラム : イベント ハンドラを作成する」では、Button コントロールの MouseEnter イベントおよび MouseLeave イベントに応答するコードを記述する方法について説明しました。では、2 つ以上の Button コントロールがあり、すべてのコントロールに同じメッセージを表示する場合はどうなるでしょうか。コントロールごとにイベント ハンドラにコードを記述することもできますが、それよりも簡単な方法があります。
MouseEnter イベントのイベント ハンドラ メソッドをよく見ると、Method 宣言 (Private Sub Button1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseEnter) に Handles 句 (Handles Button1.MouseEnter) が含まれています。当然のことながら、Handles キーワードは、処理するイベントをイベント ハンドラに通知します。
複数のコントロール間でイベント ハンドラを共有するには、追加のコントロール名、および処理するイベントの名前を追加するだけです。それらのコントロールのいずれかに対してイベントが発生すると、イベント ハンドラに通知されます。たとえば、2 つの Button コントロールがあり、両方に同じイベント ハンドラを使用する場合、Handles 句は次のようになります。
Handles Button1.MouseEnter, Button2.MouseEnter.
これで、両方のコントロールの MouseEnter イベントを単一のメソッドで処理できますが、イベント ハンドラは、イベントを呼び出したコントロールをどのようにして知るのでしょうか。Method 宣言をもう一度見ると、ByVal sender As Object という句があります。Sender キーワードは、イベントを呼び出したオブジェクト (この場合はコントロール) をイベント ハンドラに通知します。
やってみよう
イベント ハンドラを共有するには
前のレッスンで作成した EventHandler プロジェクトを開きます。プロジェクトを保存しなかった場合は、まず前のレッスン「ユーザーに反応するプログラム : イベント ハンドラを作成する」に戻って、そのレッスンの手順を完了する必要があります。
ソリューション エクスプローラで Form1.vb を選択して、[表示] メニューの [デザイナ] をクリックします。
ツールボックスから、フォームに別の Button コントロールをドラッグします。
[プロパティ] ウィンドウで、AutoSize プロパティを True に設定します。
[表示] メニューの [コード] をクリックしてコード エディタを開きます。
Button1_MouseEnter メソッドの宣言 (Private Sub Button1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseEnter) で、Handles 句を Handles Button1.MouseEnter, Button2.MouseEnter と変更します。
イベント宣言の本体で、コードを次のように置換します。
If sender.Equals(Button1) Then Button1.Text = "The mouse has entered Button1" Else Button2.Text = "The mouse has entered Button2" End If
このコードは、送信元が Button1 かどうかを確認します。送信元が Button1 の場合は、Button1 の Text プロパティが更新されます。送信元が Button1 以外の場合は、Button2 の Text プロパティが更新されます。
Button1_MouseLeave メソッドの宣言で、Handles 句を次のように変更します。
Handles Button1.MouseLeave, Button2.MouseLeave.
イベント宣言の本体で、コードを次のように置換します。
sender.Text = "The mouse has left"
この場合、コードは送信元 (Button1 または Button2) の Text プロパティを同じ文字列に設定します。
F5 キーを押して、アプリケーションを実行します。
これで、マウス ポインタがボタンの上を通過すると、テキストが The mouse has entered とボタンの名前に変わります。マウスがボタンの上を離れると、テキストが The mouse has left に戻ります。
フォームにコントロールを追加して、コントロールを含むように Handles 句を変更してみましょう。同じ種類のコントロールでなくてもかまいません。
次の手順
このレッスンでは、複数のコントロール間で単一のイベント ハンドラを共有する方法について説明しました。次のレッスンでは、2 種類のコントロール (CheckBox コントロールおよび RadioButton コントロール) を使用して、ユーザーに選択肢を提示する方法について説明します。
次のレッスン : 「ユーザー選択の取得 : チェック ボックスとオプション ボタンを使用する」