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

《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实践经验,全部浓缩在下面的各个教程中:

相关推荐
码云数智-园园11 小时前
微服务架构下的分布式事务:在一致性与可用性之间寻找平衡
开发语言
C++ 老炮儿的技术栈11 小时前
volatile使用场景
linux·服务器·c语言·开发语言·c++
hz_zhangrl11 小时前
CCF-GESP 等级考试 2026年3月认证C++一级真题解析
开发语言·c++·gesp·gesp2026年3月·gespc++一级
Liu6288811 小时前
C++中的工厂模式高级应用
开发语言·c++·算法
IT猿手12 小时前
基于控制障碍函数的多无人机编队动态避障控制方法研究,MATLAB代码
开发语言·matlab·无人机·openclaw·多无人机动态避障路径规划·无人机编队
AI科技星12 小时前
全尺度角速度统一:基于 v ≡ c 的纯推导与验证
c语言·开发语言·人工智能·opencv·算法·机器学习·数据挖掘
sunwenjian88612 小时前
Java进阶——IO 流
java·开发语言·python
波特率11520012 小时前
const关键字与函数的重载
开发语言·c++·函数重载
FL162386312912 小时前
[C#][winform]segment-anything分割万物部署onnx模型一键抠图演示
开发语言·c#
百锦再12 小时前
Java 并发编程进阶,从线程池、锁、AQS 到并发容器与性能调优全解析
java·开发语言·jvm·spring·kafka·tomcat·maven