世界杯预选赛亚洲区_高达世界杯 - fzxzyy.com

事件 - Visual Basic

- 世界杯对战表

虽然可以将 Visual Studio 项目可视化为序列中执行的一系列过程,但实际上,大多数程序都是事件驱动的,这意味着执行流由称为 事件的外部事件决定。

事件是通知应用程序发生重要事件的信号。 例如,当用户单击窗体上的控件时,窗体可以引发事件 Click 并调用处理该事件的过程。 借助事件,各个不同的任务还可以相互通信。 例如,假设应用程序与主应用程序分开执行排序任务。 如果用户取消排序,应用程序可以发送一个取消事件,指示排序进程停止。

事件术语和概念

本部分介绍与 Visual Basic 中的事件一起使用的术语和概念。

声明事件

使用 Event 关键字在类、结构、模块和接口中声明事件,如以下示例所示:

Event AnEvent(ByVal EventNumber As Integer)

引发事件

事件就像一条消息,宣布发生了一些重要事件。 广播消息的行为称为引发事件。 在 Visual Basic 中,使用语句引发事件 RaiseEvent ,如以下示例所示:

RaiseEvent AnEvent(EventNumber)

必须在声明事件的类、模块或结构范围内引发事件。 例如,派生类无法引发从基类继承的事件。

事件发送方

任何能够引发事件的对象都是 事件发送方,也称为 事件源。 窗体、控件和用户定义的对象是事件发送者的示例。

事件处理程序

事件处理程序 是在发生相应事件时调用的过程。 可以将任何有效的子例程与匹配的签名用作事件处理程序。 但是,不能将函数用作事件处理程序,因为它无法将值返回给事件源。

Visual Basic 对事件处理程序使用标准命名约定,该约定将事件发送者的名称、下划线和事件名称组合在一起。 例如,一个名为Click的按钮的button1事件将被命名为Sub button1_Click。

注释

建议在为自己的事件定义事件处理程序时使用此命名约定,但这不是必需的;可以使用任何有效的子例程名称。

关联事件与事件处理程序

在事件处理程序变得可用之前,必须先使用 Handles 或 AddHandler 语句将其与事件相关联。

WithEvents 和 Handles 子句

语句 WithEvents 和 Handles 子句提供指定事件处理程序的声明性方式。 使用 WithEvents 关键字声明的对象引发的事件可以由使用 Handles 语句针对相应事件指定的任意过程进行处理,如以下示例所示:

' Declare a WithEvents variable.

Dim WithEvents EClass As New EventClass

' Call the method that raises the object's events.

Sub TestEvents()

EClass.RaiseEvents()

End Sub

' Declare an event handler that handles multiple events.

Sub EClass_EventHandler() Handles EClass.XEvent, EClass.YEvent

MsgBox("Received Event.")

End Sub

Class EventClass

Public Event XEvent()

Public Event YEvent()

' RaiseEvents raises both events.

Sub RaiseEvents()

RaiseEvent XEvent()

RaiseEvent YEvent()

End Sub

End Class

WithEvents语句和Handles子句通常是事件处理程序的最佳选择,因为它们使用的声明性语法使得事件处理更易于编码、读取和调试。 请注意以下对WithEvents变量使用的限制:

不能将 WithEvents 变量用作对象变量。 也就是说,不能将其声明为 Object—必须在声明变量时指定类名。

由于共享事件未绑定到类实例,因此不能用于 WithEvents 以声明方式处理共享事件。 同样,不能使用WithEvents或Handles来处理来自Structure的事件。 在这两种情况下,都可以使用 AddHandler 语句来处理这些事件。

不能创建变量数组 WithEvents 。

WithEvents 变量允许单个事件处理程序处理一种或多种事件,或一个或多个事件处理程序来处理同一类型的事件。

尽管子 Handles 句是将事件与事件处理程序关联的标准方法,但它仅限于在编译时将事件与事件处理程序相关联。

在某些情况下,例如与窗体或控件相关的事件,Visual Basic 会自动生成一个空事件处理程序并将其与事件关联。 例如,在设计模式下双击窗体上的命令按钮时,Visual Basic 将为命令按钮创建空事件处理程序和 WithEvents 变量,如以下代码所示:

Friend WithEvents Button1 As System.Windows.Forms.Button

Protected Sub Button1_Click() Handles Button1.Click

End Sub

AddHandler 和 RemoveHandler

该 AddHandler 语句与 Handles 子句类似,这两者都允许你指定事件处理程序。 但是,AddHandler与RemoveHandler一起使用时,比Handles子句提供更大的灵活性,使你可以动态添加、删除和更改与事件关联的事件处理程序。 如果要处理结构中的共享事件或事件,则必须使用 AddHandler。

AddHandler 需要使用两个自变量:事件发送方(如控件)引发的事件的名称和计算结果为委托的表达式。 使用 AddHandler时不需要显式指定委托类,因为 AddressOf 该语句始终返回对委托的引用。 以下示例将事件处理程序与对象引发的事件相关联:

AddHandler Obj.XEvent, AddressOf Me.XEventHandler

RemoveHandler 用于将事件与事件处理程序断开连接,使用的语法与 AddHandler 相同。 例如:

RemoveHandler Obj.XEvent, AddressOf Me.XEventHandler

在以下示例中,事件处理程序与事件关联,并引发该事件。 事件处理程序捕获事件并显示消息。

然后删除第一个事件处理程序,用不同的事件处理程序替换与该事件相关联的程序。 当事件再次被引发时,将显示不同的消息。

最后,删除第二个事件处理程序,然后第三次触发该事件。 由于不再有与事件关联的事件处理程序,因此不会执行任何作。

Module Module1

Sub Main()

Dim c1 As New Class1

' Associate an event handler with an event.

AddHandler c1.AnEvent, AddressOf EventHandler1

' Call a method to raise the event.

c1.CauseTheEvent()

' Stop handling the event.

RemoveHandler c1.AnEvent, AddressOf EventHandler1

' Now associate a different event handler with the event.

AddHandler c1.AnEvent, AddressOf EventHandler2

' Call a method to raise the event.

c1.CauseTheEvent()

' Stop handling the event.

RemoveHandler c1.AnEvent, AddressOf EventHandler2

' This event will not be handled.

c1.CauseTheEvent()

End Sub

Sub EventHandler1()

' Handle the event.

MsgBox("EventHandler1 caught event.")

End Sub

Sub EventHandler2()

' Handle the event.

MsgBox("EventHandler2 caught event.")

End Sub

Public Class Class1

' Declare an event.

Public Event AnEvent()

Sub CauseTheEvent()

' Raise an event.

RaiseEvent AnEvent()

End Sub

End Class

End Module

处理从基类继承的事件

派生类(从基类继承特征的类)可以使用语句处理基类 Handles MyBase 引发的事件。

处理继承自基类的事件的具体操作

通过在事件处理程序过程的声明行中添加 Handles MyBase.eventname 语句来声明派生类中的事件处理程序,其中 eventname 是所处理的基类中的事件的名称。 例如:

Public Class BaseClass

Public Event BaseEvent(ByVal i As Integer)

' Place methods and properties here.

End Class

Public Class DerivedClass

Inherits BaseClass

Sub EventHandler(ByVal x As Integer) Handles MyBase.BaseEvent

' Place code to handle events from BaseClass here.

End Sub

End Class

相关部分

标题

DESCRIPTION

演练:声明和引发事件

分步展示了如何声明和引发类事件。

演练:处理事件

演示如何编写事件处理程序过程。

如何:声明自定义事件以避免阻止

演示如何定义允许异步调用其事件处理程序的自定义事件。

如何:声明自定义事件以节省内存

演示如何定义仅在处理事件时使用内存的自定义事件。

Visual Basic 中继承的事件处理程序的故障排除

列出继承组件中事件处理程序出现的常见问题。

事件

概述 .NET Framework 中的事件模型。

在 Windows 窗体中创建事件处理程序

介绍如何处理与 Windows 窗体对象关联的事件。

代表

概述了 Visual Basic 中的委托。

木桩知识百科全书「中木商网」木桩优缺点常见问题图文详细介绍
地牢猎手好玩吗