次の方法で共有


詳細情報 : イベント ハンドラを共有する

更新 : 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 キーワードは、イベントを呼び出したオブジェクト (この場合はコントロール) をイベント ハンドラに通知します。

やってみよう

イベント ハンドラを共有するには

  1. 前のレッスンで作成した EventHandler プロジェクトを開きます。プロジェクトを保存しなかった場合は、まず前のレッスン「ユーザーに反応するプログラム : イベント ハンドラを作成する」に戻って、そのレッスンの手順を完了する必要があります。

  2. ソリューション エクスプローラで Form1.vb を選択して、[表示] メニューの [デザイナ] をクリックします。

  3. ツールボックスから、フォームに別の Button コントロールをドラッグします。

  4. [プロパティ] ウィンドウで、AutoSize プロパティを True に設定します。

  5. [表示] メニューの [コード] をクリックしてコード エディタを開きます。

  6. Button1_MouseEnter メソッドの宣言 (Private Sub Button1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseEnter) で、Handles 句を Handles Button1.MouseEnter, Button2.MouseEnter と変更します。

  7. イベント宣言の本体で、コードを次のように置換します。

    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 プロパティが更新されます。

  8. Button1_MouseLeave メソッドの宣言で、Handles 句を次のように変更します。

    Handles Button1.MouseLeave, Button2.MouseLeave.

  9. イベント宣言の本体で、コードを次のように置換します。

    sender.Text = "The mouse has left"
    

    この場合、コードは送信元 (Button1 または Button2) の Text プロパティを同じ文字列に設定します。

  10. F5 キーを押して、アプリケーションを実行します。

    これで、マウス ポインタがボタンの上を通過すると、テキストが The mouse has entered とボタンの名前に変わります。マウスがボタンの上を離れると、テキストが The mouse has left に戻ります。

    フォームにコントロールを追加して、コントロールを含むように Handles 句を変更してみましょう。同じ種類のコントロールでなくてもかまいません。

次の手順

このレッスンでは、複数のコントロール間で単一のイベント ハンドラを共有する方法について説明しました。次のレッスンでは、2 種類のコントロール (CheckBox コントロールおよび RadioButton コントロール) を使用して、ユーザーに選択肢を提示する方法について説明します。

次のレッスン : 「ユーザー選択の取得 : チェック ボックスとオプション ボタンを使用する

参照

処理手順

ユーザーに反応するプログラム : イベント ハンドラを作成する