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

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

相关推荐
2401_858286116 分钟前
52.【C语言】 字符函数和字符串函数(strcat函数)
c语言·开发语言
铁松溜达py7 分钟前
编译器/工具链环境:GCC vs LLVM/Clang,MSVCRT vs UCRT
开发语言·网络
everyStudy7 分钟前
JavaScript如何判断输入的是空格
开发语言·javascript·ecmascript
C-SDN花园GGbond2 小时前
【探索数据结构与算法】插入排序:原理、实现与分析(图文详解)
c语言·开发语言·数据结构·排序算法
迷迭所归处3 小时前
C++ —— 关于vector
开发语言·c++·算法
架构文摘JGWZ3 小时前
Java 23 的12 个新特性!!
java·开发语言·学习
leon6253 小时前
优化算法(一)—遗传算法(Genetic Algorithm)附MATLAB程序
开发语言·算法·matlab
锦亦之22334 小时前
QT+OSG+OSG-earth如何在窗口显示一个地球
开发语言·qt
我是苏苏4 小时前
Web开发:ABP框架2——入门级别的增删改查Demo
java·开发语言
姜太公钓鲸2334 小时前
c++ static(详解)
开发语言·c++