大家好,今日我们继续类与集合的讲解,在前两讲中我们分别讲了类的属性和方法,我们再次区分一下什么是属性,什么是方法,什么是事件。
1属性 属性指的是对象的性质。
2方法 方法指的是类的一些操作,是对象的动作。
3事件 事件指的是类引发的一个调用;是对象的响应。
区分理解:
1 类方法的执行需要在代码中以显性的方式指定。
2 当最终操作者触发类对象时,需要对象产生一系列的操作,就是事件。
3 事件和方法都是类提供的一系列代码的操作,区别在于,事件无法也不必由代码显性调用,事件没有返回值。
为了使用对象的事件,需要在对象声明中使用WithEvents关键字声明源事件的对象。例如,需要在myclass 对象中使用mycmd对象的事件,那么我们在myclass类中做如下的声明:
Public WithEvents mycmd As CommandButton
需要注意的是,使用WithEvents只是声明了源事件的变量对象,而并不实际生成对象,为了应用这个对象,你需要将这个类实例化,生成真实的对象,才能在对象上应用这个事件,这个过程就是将魂转化为肉身的过程,转化完成之后,在肉身上才能应用你的事件。
注意点:WithEvents声明变量不能是通用类变量,如Object,而必须指定类名,也不能把WithEvents变量声明为As New。不能在标准模块中使用WithEvents。(这一点我在后面还有讲解)
下面我们通过一个实例来理解上面的讲解,这个实例有点像计数器。我们每次点击数字的时候,在TEXT控件中会显示数字。
思路:我们在一个窗体上建立10个数字按钮及清空按钮,并建立一个text的控件用于显示点击的数字,显示的数字也就是按钮的Caption.
实现的过程思路:构建一个myclass的类,在这个类中定义一个mycmd的对象,并应用这个对象的点击事件。我们看下面的代码:
类模块myclass的代码
Option Explicit
Public WithEvents mycmd As CommandButton
Private Sub mycmd_Click()
If mycmd.Caption = "清空" Then
UserForm2.TextBox1 = ""
Else
If mycmd.Caption = "0" And UserForm2.TextBox1 = "" Then
UserForm2.TextBox1 = ""
Else
UserForm2.TextBox1 = UserForm2.TextBox1 & mycmd.Caption
End If
End If
End Sub
窗体UserForm2的代码
Dim mycol As New Collection
Private Sub UserForm_Initialize()
Dim i%
Dim myct As MyClass
For Each r In Me.Controls
If TypeName(r) = "CommandButton" Then
Set myct = New MyClass
Set myct.mycmd = r
mycol.Add myct
End If
Next
tt = mycol.Count
Set myct = Nothing
End Sub
代码截图:

代码分析:
1 Public WithEvents mycmd As CommandButton这行预计声明mycmd作为CommandButton一个事件源的对象。
2 Private Sub mycmd_Click()
If mycmd.Caption = "清空" Then
UserForm2.TextBox1 = ""
Else
If mycmd.Caption = "0" And UserForm2.TextBox1 = "" Then
UserForm2.TextBox1 = ""
Else
UserForm2.TextBox1 = UserForm2.TextBox1 & mycmd.Caption
End If
End If
End Sub
上述过程是类模块的事件过程,是处理类对象在响应点击动作时的一系列操作。
3 在窗体的构建函数中,执行下面的代码:
Dim myct As MyClass
For Each r In Me.Controls
If TypeName(r) = "CommandButton" Then
Set myct = New MyClass
Set myct.mycmd = r
mycol.Add myct
End If
Next
首先要在窗体上每个控件进行循环,对于CommandButton控件,定义为新的MYCLASS类对象myct,然后对这个新的类进行set赋值,此后这个对象将响应mycd对象的系列事件了。


点击,清空后会清空上述输入的数据。
今日内容回向:
1 类的事件是如何创建的?
2 什么是类的事件?