如何处理控件事件

控件(以及窗体)的事件通常通过 Visual Studio Windows 窗体视觉设计器进行设置。 通过可视化设计器设置事件称为在设计阶段处理事件。 还可以在代码中动态处理事件,称为在运行时处理事件。 在运行时创建的事件可以根据您的应用当前正在进行的操作动态地连接事件处理程序。

在设计时处理事件

在 Visual Studio 中,使用 Visual Designer 管理控件事件的处理程序。 视觉设计器将生成处理程序代码,并将其添加到事件中。

设置处理程序

使用 “属性 ”窗格添加或设置事件的处理程序:

  1. 打开包含待更改控件的表单的视觉设计器。

  2. 选择控件。

  3. 按事件按钮将“属性”窗格模式更改为“事件”。

  4. 查找要向其添加处理程序的事件,例如 Click 事件:

    Visual Studio 属性窗格,其中显示了已启用事件模式和单击事件。

  5. 执行下列操作之一:

    • 双击事件以生成新处理程序,如果未分配任何处理程序,则为空。 如果不是空的,此操作将打开表单的代码编辑器,并跳转到现有的处理程序。

    • 使用选择框 ( ) 选择现有处理程序。

      选择框将列出具有事件处理程序兼容方法签名的所有方法。

清除处理器

若要删除事件处理程序,你不能只删除表单代码隐藏文件中的处理程序代码,它仍由设计器引用。 使用 “属性 ”窗格删除事件的处理程序:

  1. 打开包含待更改控件的表单的视觉设计器。

  2. 选择控件。

  3. 按事件按钮将“属性”窗格模式更改为“事件”。

  4. 查找包含要删除的处理程序的事件,例如 Click 事件:

    Visual Studio 属性窗格,其中显示了已启用事件模式和单击事件。

  5. 右键单击事件,然后选择 “重置”。

在运行时处理事件

通常通过可视化设计器在设计时向控件添加事件处理程序。 不过,你可以在运行时创建控件,这要求在代码中添加事件处理程序。 在代码中添加处理程序也使你有机会向同一事件添加多个处理程序。

添加处理程序

以下示例演示如何创建控件并添加事件处理程序。 此控件是在处理Button.Click事件时由不同的按钮创建的。 按下 Button1 时。 代码移动并调整新按钮的大小。 新按钮 Click 的事件由 MyNewButton_Click 该方法处理。 若要显示新按钮,则会将其添加到窗体的 Controls 集合中。 还有用于删除 Button1.Click 事件处理程序的代码,这在 “删除处理程序 ”部分中进行了讨论。

private void button1_Click(object sender, EventArgs e)
{
    // Create and add the button
    Button myNewButton = new()
    {
        Location = new Point(10, 10),
        Size = new Size(120, 25),
        Text = "Do work"
    };

    // Handle the Click event for the new button
    myNewButton.Click += MyNewButton_Click;
    this.Controls.Add(myNewButton);

    // Remove this button handler so the user cannot do this twice
    button1.Click -= button1_Click;
}

private void MyNewButton_Click(object sender, EventArgs e)
{
    
}
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    'Create and add the button
    Dim myNewButton As New Button() With {.Location = New Point(10, 10),
                                          .Size = New Size(120, 25),
                                          .Text = "Do work"}

    'Handle the Click event for the new button
    AddHandler myNewButton.Click, AddressOf MyNewButton_Click
    Me.Controls.Add(myNewButton)

    'Remove this button handler so the user cannot do this twice
    RemoveHandler Button1.Click, AddressOf Button1_Click
End Sub

Private Sub MyNewButton_Click(sender As Object, e As EventArgs)

End Sub

若要运行此代码,请使用 Visual Studio Visual Designer 对窗体执行以下作:

  1. 向窗体添加新按钮并将其命名 为 Button1
  2. 按事件按钮将“属性”窗格模式更改为“事件”。
  3. 双击 Click 事件以生成处理程序。 此操作将打开代码窗口并生成一个空的 Button1_Click 方法。
  4. 将方法代码替换为上面的代码。

有关 C# 事件的详细信息,请参阅 事件(C#) 有关 Visual Basic 事件的详细信息,请参阅 事件(Visual Basic)

删除处理程序

“添加处理程序”部分使用了一些代码来演示如何添加处理程序。 该代码还包含删除处理程序的调用:

button1.Click -= button1_Click;
RemoveHandler Button1.Click, AddressOf Button1_Click

此语法可用于从任何事件中删除任何事件处理程序。

有关 C# 事件的详细信息,请参阅 事件(C#) 有关 Visual Basic 事件的详细信息,请参阅 事件(Visual Basic)

如何将多个事件与同一处理程序一起使用

使用 Visual Studio Visual Designer 的 “属性 ”窗格,可以选择已由其他事件使用的同一处理程序。 按照 “设置处理程序 ”部分中的说明选择现有处理程序,而不是创建新的处理程序。

在 C# 中,处理程序附加到窗体的设计器代码中的控件事件,该设计器代码可以通过可视化设计器进行修改。 有关 C# 事件的详细信息,请参阅 事件(C#)

Visual Basic

在 Visual Basic 中,处理程序附加到窗体代码隐藏文件中控件的事件,其中声明了事件处理程序代码。 可以将多个 Handles 关键字添加到事件处理程序代码中,以将其与多个事件一起使用。 视觉设计器将为你生成 Handles 关键字,并将其添加到事件处理程序。 但是,只要处理程序方法的签名与事件匹配,就可以自行对任何控件的事件和事件处理程序执行此作。 有关 Visual Basic 事件的详细信息,请参阅 事件(Visual Basic)

此代码演示如何将同一方法用作两个不同的 Button.Click 事件的处理程序:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click
    'Do some work to handle the events
End Sub

另请参阅