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

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

相关推荐
懒大王爱吃狼29 分钟前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍
秃头佛爷2 小时前
Python学习大纲总结及注意事项
开发语言·python·学习
待磨的钝刨2 小时前
【格式化查看JSON文件】coco的json文件内容都在一行如何按照json格式查看
开发语言·javascript·json
XiaoLeisj3 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
励志成为嵌入式工程师4 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
捕鲸叉5 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer5 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
Peter_chq5 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
记录成长java6 小时前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet
前端青山6 小时前
Node.js-增强 API 安全性和性能优化
开发语言·前端·javascript·性能优化·前端框架·node.js