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

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

相关推荐
钮钴禄·爱因斯晨1 小时前
Java 面向对象进阶之多态:从概念到实践的深度解析
java·开发语言·数据结构
鸽子炖汤1 小时前
Java中==和equals的区别
java·开发语言·jvm
有个傻瓜1 小时前
PHP语言核心技术全景解析
开发语言·kubernetes·php
菥菥爱嘻嘻1 小时前
JS手写代码篇---手写ajax
开发语言·javascript·ajax
江梦寻1 小时前
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
开发语言·后端·python·macos·架构·策略模式
霖檬ing2 小时前
Python——MySQL远程控制
开发语言·python·mysql
qq_429879673 小时前
省略号和可变参数模板
开发语言·c++·算法
优秀的颜4 小时前
计算机基础知识(第五篇)
java·开发语言·分布式
CodeWithMe4 小时前
【C/C++】std::vector成员函数清单
开发语言·c++
uyeonashi4 小时前
【QT控件】输入类控件详解
开发语言·c++·qt