如何:将多个事件连接到 ASP.NET 网页中的单个事件处理程序
更新:2007 年 11 月
如果已具有一个事件处理程序,可以将几个控件事件绑定到该事件处理程序。只要事件全部具有相同的方法签名,则这几个事件可以来自同一个控件,而一个事件也可以来自数个不同的控件。例如,您可能希望将 ASP.NET 页上几个 Button 服务器控件的 Click 事件绑定到单个事件处理程序。在调用处理程序后,您可以确定哪个控件引发了事件。
将多个事件连接到单个事件处理程序
在页标记中,向每个控件添加相同的事件名称和方法名称,如下面的代码示例所示。
<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 中将多个事件连接到单个事件处理程序
通过添加某方法应当处理的事件的名称修改该方法的 Handles 子句。使用逗号分隔事件名称。
下面的代码示例说明如何将 Button_Click 方法绑定到由三个 Button 控件引发的事件。
Sub Button_Click (ByVal sender as System.Object, _ ByVal e as System.EventArgs) _ Handles Button1.Click, Button2.Click, Button3.Click
说明:
如果使用 Handles 子句绑定事件和方法,则也不要在标记中包含事件属性。例如,不要在 Button 控件的标记中包含 onClick 属性。如果您这样做,将会调用该方法两次。
确定哪个控件引发了事件
在事件处理程序中,声明其类型与引发事件的控件匹配的变量。
将事件处理程序的第一个参数分配给变量,并将它强制转换为适当的类型。
下面的代码示例显示由几个不同按钮调用的 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; }