如何处理控制事件(Windows Forms .NET)

控件(和窗体)的事件通常通过 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 事件处理程序中创建另一个按钮。 当按下 按钮1时。 代码移动并调整新按钮的大小。 新按钮的 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

另请参阅