如何处理控件事件(Windows 窗体 .NET)

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

重要

面向 .NET 7 和 .NET 6 的桌面指南文档正在撰写中。

处理事件 - 设计器

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

设置处理程序

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

  1. 打开包含要更改的控件的窗体的可视化设计器。

  2. 选择 控件。

  3. 通过按事件按钮 () 将“属性”窗格模式更改为“事件”

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

    Visual Studio properties pane shown with the events mode enabled and the click event.

  5. 执行下列操作之一:

    • 双击事件以生成新处理程序,如果未分配任何处理程序,则为空。 如果不为空,则此操作会打开窗体的代码,并导航到现有处理程序。

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

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

清除处理程序

若要删除事件处理程序,不能只删除窗体的代码隐藏文件中的处理程序代码,该代码仍由事件引用。 使用“属性”窗格删除事件的处理程序

  1. 打开包含要更改的控件的窗体的可视化设计器。

  2. 选择 控件。

  3. 通过按事件按钮 () 将“属性”窗格模式更改为“事件”

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

    Visual Studio properties pane shown with the events mode enabled and the click event.

  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 可视化设计器对窗体执行以下操作:

  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 可视化设计器的“属性”窗格,可以选择其他事件已使用的同一处理程序。 按照设置处理程序部分中的说明选择现有处理程序,而不是创建新的处理程序。

在 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

另请参阅