详细了解:共享事件处理程序

更新:2007 年 11 月

在本课中,您将学习如何创建处理多个控件事件的共享事件处理程序。

在上一课 使程序响应用户:创建事件处理程序 中,您学习了如何编写代码以响应 Button 控件的 MouseEnterMouseLeave 事件。但是,如果您有两个或多个 Button 控件,并且您想对所有控件显示同一消息,您该怎么办呢? 您可以在事件处理程序中为每个控件编写代码,但幸好有一个更简单的方法。

如果您仔细观察 MouseEnter 事件的事件处理程序方法,您就会注意到 Method 声明 (Private Sub Button1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseEnter) 包含一个 Handles 子句 (Handles Button1.MouseEnter)。毫不奇怪,Handles 关键字会告诉事件处理程序应处理哪些事件。

若要在多个控件间共享事件处理程序,您只需添加其他控件的名称以及要处理的事件的名称。当这些控件中的任何一个发生该事件时,事件处理程序便会得到通知。例如,如果您有两个 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”的 Text 属性;如果不是,则更新“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 子句以包括它们 — 它们甚至不必为同一类型的控件!

后续步骤

在本课中,您学习了如何在多个控件之间共享单个事件处理程序。在下一课中,您将学习如何使用两种新类型的控件(CheckBoxRadioButton 控件)为用户提供选项。

下一课:获取用户选项:使用复选框和单选按钮

请参见

任务

使程序响应用户:创建事件处理程序