何为 WithEvents

Private WithEvents frmMaster As frmMaster

这个大家还熟悉吗?想必,大家一定不陌生。在我做结账窗体的时候——VB与报表交互,我当时看到这个的时候非常的纳闷,于是就动手查了查。有查必有收获。

定义

WithEvents:处理对象的事件;引发事件的对象叫做事件源。为了处理事件源所引发的事件,可以用 WithEvents 关键字声明对象类的变量。

理解:其实是一个定义变量时候的修饰符,指的是被修饰的变量拥有所定义的类的属性和方法。

用法

一、当某个变量是使用 WithEvents 定义时,可以用声明方式指定某个方法使用 Handles 关键字处理该变量的事件。

二、只能在类或模块级别使用WithEvents。这意味着 WithEvents 变量的声明上下文必须是类或模块,不能是源文件、命名空间、结构或过程。

三、不能对结构成员使用 WithEvents。

四、只能使用 WithEvents 声明单个变量,不能声明数组。

五、必须将 WithEvents 变量声明成为对象变量,以便它们可以接受类实例。但是WithEvents不能声明为 Object。必须声明为可以引发事件的特定类。

引用

其实我对这个知识点的理解还是不够,下面我把在一位大佬的理解添加到这里帮助大家一起理解。

举个最简单的例子:
Public Class Form1

Dim WithEvents a As Form1

Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
    a = Me
    a.Text = "abc"
    a.Close() 
End Sub

End Class

这里定义了一个名为 a 的 Form1 类型的变量,加上 WithEvents 修饰就是说这个 a 拥有了 Form1 这种类型的属性和方法。
a = Me,先实例化给 a 赋值成了当前窗体。
a.Text = “abc” a.Close(),a 目前就已经相当于 Form1了。
当然这是最简单的一个示范例子,实际使用中并不是这么用的。
再给个例子,题主能看明白否?

Public Class Form1
Dim WithEvents a As abc
Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
a = New abc
a.abcd()
End Sub
End Class

Public Class abc
Sub abcd()
MsgBox(“123”)
End Sub
End Class

猜你喜欢

转载自blog.csdn.net/whc888666/article/details/80900868