方法 : ASP.NET Web ページの 1 つのイベント ハンドラに複数のイベントを関連付ける
更新 : 2007 年 11 月
イベント ハンドラが既に存在する場合に、複数のコントロール イベントをそのハンドラに関連付けることができます。関連付けるイベントは、同じコントロールの複数のイベントでも、複数の異なるコントロールの 1 つのイベントでもかまいません。ただし、すべてのイベントが同じメソッド シグネチャを持っている必要があります。たとえば、ASP.NET ページ上のさまざまな Button サーバー コントロールの Click イベントを 1 つのイベント ハンドラに関連付けることができます。ハンドラが呼び出されたときに、どちらのコントロールがイベントを発生させたかを調べることができます。
1 つのイベント ハンドラに複数のイベントを関連付けるには
次のコード例に示すように、ページ マークアップで、同じイベント名とメソッド名を各コントロールに追加します。
<asp:Button ID="Button1" onclick="Button_Click" runat="server" Text="Button1" /> <br /> <asp:Button ID="Button2" onclick="Button_Click" runat="server" Text="Button2" />
メモ : 処理するイベントに対してメソッドが正しいシグネチャを持つようにする必要があります。
Visual Basic で 1 つのイベント ハンドラに複数のイベントを関連付けるには
メソッドが処理するイベントの名前を追加して、メソッドの Handles 句を変更します。複数のイベント名はコンマで区切ります。
3 つの Button コントロールで発生するイベントに Button_Click メソッドを関連付ける方法を次のコード例に示します。
Sub Button_Click (ByVal sender as System.Object, _ ByVal e as System.EventArgs) _ Handles Button1.Click, Button2.Click, Button3.Click
メモ : Handles 句を使用してイベントとメソッドを関連付ける場合は、マークアップにイベント属性を含めないでください。たとえば、Button コントロールのマークアップには onClick 属性を含めません。イベント属性が含まれていると、メソッドが 2 度呼び出されます。
どのコントロールがイベントを発生させたかを調べるには
イベント ハンドラで、イベントを発生させたコントロールと同じ型の変数を宣言します。
イベント ハンドラの最初の引数を変数に割り当てて適切な型にキャストします。
複数の異なるボタンから呼び出される Button コントロールの Click イベントのハンドラを次のコード例に示します。このハンドラは、イベントを発生させたボタンの ID プロパティを表示します。
Private Sub Button_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click, Button2.Click, Button3.Click Dim b As Button = CType(sender, Button) Label1.Text = b.ID End Sub
private void Button_Click(object sender, System.EventArgs e) { Button b = (Button) sender; Label1.Text = b.ID; }