如何处理控件事件(Windows 窗体 .NET)
控件(和窗体)的事件通常通过 Visual Studio Visual Designer for Windows Forms 设置。 通过可视化设计器设置事件称为在设计时处理事件。 还可以在代码中动态处理事件,这称为在运行时处理事件。 可以通过在运行时创建的事件,根据应用当前正在执行的操作动态连接事件处理程序。
重要
面向 .NET 7 和 .NET 6 的桌面指南文档正在撰写中。
处理事件 - 设计器
在 Visual Studio 中,使用可视化设计器管理控件事件的处理程序。 可视化设计器将生成处理程序代码,并将其添加到事件中。
设置处理程序
使用“属性”窗格添加或设置事件的处理程序:
打开包含要更改的控件的窗体的可视化设计器。
选择 控件。
通过按事件按钮 () 将“属性”窗格模式更改为“事件”。
查找要向其添加处理程序的事件,例如 Click 事件:
执行下列操作之一:
双击事件以生成新处理程序,如果未分配任何处理程序,则为空。 如果不为空,则此操作会打开窗体的代码,并导航到现有处理程序。
使用选择框 () 选择现有处理程序。
选择框将列出具有事件处理程序兼容方法签名的所有方法。
清除处理程序
若要删除事件处理程序,不能只删除窗体的代码隐藏文件中的处理程序代码,该代码仍由事件引用。 使用“属性”窗格删除事件的处理程序:
打开包含要更改的控件的窗体的可视化设计器。
选择 控件。
通过按事件按钮 () 将“属性”窗格模式更改为“事件”。
查找包含要删除的处理程序的事件,例如 Click 事件:
右键单击事件,然后选择“重置”。
处理事件 - 代码
通常在设计时通过可视化设计器将事件处理程序添加到控件。 不过,可以在运行时创建控件,这需要在代码中添加事件处理程序。 在代码中添加处理程序还让你可以向同一事件添加多个处理程序。
添加处理程序
以下示例演示如何创建控件并添加事件处理程序。 此控件是在 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 可视化设计器对窗体执行以下操作:
- 向窗体添加新按钮并将其命名为 Button1。
- 通过按事件按钮 () 将“属性”窗格模式更改为“事件”。
- 双击 Click 事件以生成处理程序。 此操作将打开代码窗口并生成空白
Button1_Click
方法。 - 将方法代码替换为上述代码。
有关 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
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈