第六讲:构建类的事件(下)

《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。

类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入,有必要理解这些抽象的理论知识。对象,类,过程,方法,属性,事件,接口,接口如何实现等等。掌握了这些理论,不仅对于VBA这种寄生语言的实质有所深入的理解,也对自然界的很多事物将同样有所感悟。目前,这套教程程序文件已经通过32位,64位两种office系统测试。

这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:第六讲:构建类的事件(下)

【分享成果,随喜正能量】时间是刹那刹那的过,刹那刹那的催人老。勿待老来方学道,孤坟多是少年人。用功的人要善于调和身心,务使心平气和,无挂无碍,

无我无人,行住坐卧,妙合玄机。。

第六讲  如何构建类的事件

大家好,今日我们继续讲解VBA中类的解读及应用,今日的内容是如何构建类的事件。这讲的内容虽然枯燥,但对于学习非常有用。

3类事件的实例讲解,计算器的实现

下面我们通过一个实例来理解上面的讲解,这个实例有点像计数器。我们每次点击数字的时候,在TEXTBOX控件中会显示数字。

思路:我们在一个窗体上建立10个数字按钮及清空按钮,并建立一个textbox的控件用于显示点击的数字,显示的数字也就是按钮的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 什么是类的事件?

本讲内容参考程序文件:VBA-CLASS(1-28).xlsm

今日内容回向:

1 类的事件是如何创建的?

2 什么是类的事件?

本讲内容参考程序文件:VBA-CLASS(1-28).xlsm

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:

相关推荐
Scott9999HH13 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社14 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海14 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖15 小时前
JDK 26 新特性详解
java·开发语言
马优晨16 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区17 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大18 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai18 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
এ慕ོ冬℘゜18 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa18 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio