VBA中类的解读及应用第八讲:实现定时器功能的自定义类事件

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

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

这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:VBA中类的解读及应用第八讲:实现定时器功能的自定义类事件2244e2b022604d3262769e1d10fcede5.jpeg

【分享成果,随喜正能量】千万别把运气当实力,别把平台当本事。认清自己的实力,知道自己有几斤几两,不低估风险,不高估自己,才不会被时代淘汰 。因为这个世界上,没有稳定的工作,只有赖以生存的实力。 。

第八讲 用户自定义类事件

2 实现定时器功能的自定义类事件代码实例讲解

实例:下面的示例实现一个定时器功能。代码实现了所有与事件相关的方法、属性和语句,包括Event 语句。该示例使用一个窗体,该窗体有两个按钮,以及两个文本框。单击按钮后,第一个文本框显示提示内容,第二个文本框中时钟开始计时。

建立一个类,命名为mytime

Option Explicit

Public Event UpdateTime(ByVal mynow As Double)

Public Event dabiao()

Public Sub TimerTask(ByVal biaozhun As Double)

Dim myStart As Double

Dim mySecond As Double

Dim myFar As Double

myStart = Timer

myFar = myStart

Do While Timer < myStart + biaozhun

If Timer - myFar >= 1 Then

myFar = myFar + 1

RaiseEvent UpdateTime(Timer - myStart)

End If

Loop

RaiseEvent dabiao

Do While Timer >= myStart + biaozhun

If Timer - myFar >= 1 Then

myFar = myFar + 1

RaiseEvent UpdateTime(Timer - myStart)

End If

Loop

End Sub

建立一个窗体:

8ee7617239d41a90f2288366191489f0.jpeg

Option Explicit

Private WithEvents mText As mytime

Private Sub CommandButton1_Click()

TextBox1.Text = "开始计时:"

TextBox2.Text = "0"

mText.TimerTask (9)

End Sub

Private Sub CommandButton2_Click()

End

End Sub

Private Sub mText_dabiao()

TextBox1.Text = "已经达到标准"

DoEvents

End Sub

Private Sub mText_UpdateTime(ByVal mynow As Double)

TextBox2.Text = Str(Format(mynow, "0"))

DoEvents

End Sub

Private Sub UserForm_Initialize()

TextBox1.Text = ""

TextBox2.Text = ""

Set mText = New mytime

End Sub

Private Sub UserForm_Terminate()

End

End Sub

代码的运行过程及解释:

1) 在窗体的构建过程中TextBox1.Text = "";TextBox2.Text = "";Set mText = New mytime;这里mytime 是一个类,Set mText = New mytime就是将mText实例了一个新的mytime的类。

2) 我们点击“开始按钮”,这个时候TextBox1.Text = "开始计时:",然后在第二个文本框中显示计时的开始为0, TextBox2.Text = "0",然后执行类的TimerTask过程,(什么是过程呢?其实就是方法、函数、事件的总称).此处的过程指的是方法,会传递一个参数9,mText.TimerTask (9)。

3) 我们看看上述类的过程是如何执行的. mText.TimerTask (9)

Public Sub TimerTask(ByVal biaozhun As Double)

Dim myStart As Double

Dim mySecond As Double

Dim myFar As Double

myStart = Timer

myFar = myStart

Do While Timer < myStart + biaozhun

If Timer - myFar >= 1 Then

myFar = myFar + 1

RaiseEvent UpdateTime(Timer - myStart)

End If

Loop

RaiseEvent dabiao

Do While Timer >= myStart + biaozhun

If Timer - myFar >= 1 Then

myFar = myFar + 1

RaiseEvent UpdateTime(Timer - myStart)

End If

Loop

End Sub

上面的过程中先定义了几个变量,然后将执行一个循环,循环执行到RaiseEvent UpdateTime(Timer - myStart)会触发事件UpdateTime(Timer - myStart).

4) 关于UpdateTime(Timer - myStart)事件.这个事件是在类模块中Public Event UpdateTime(ByVal mynow As Double)进行声明的相应的是myclass事件,我们回到窗体的代码,看看这个事件的过程。

Private Sub mText_UpdateTime(ByVal mynow As Double)

TextBox2.Text = Str(Format(mynow, "0"))

DoEvents

End Sub

这个事件就是在textbox2的文本框中显示一个值,这个值是TimerTask传递过来的.显示值后,会DoEvents。交出程序的控制权,也就是说程序会向下进行。

5) 程序向下进行仍是执行的是第一个循环语句。

6) 当第一个循环语句结束时,会执行RaiseEvent dabiao,会触发dabiao事件,这个事件同样也是在类模块中声明的Public Event dabiao(),是mText的事件。仍是回到窗体代码看看这个事件过程:

Private Sub mText_dabiao()

TextBox1.Text = "已经达到标准"

DoEvents

End Sub

这个时间在文本框中显示已经达到标准。执行完后交出程序的控制权。

7) 程序执行完上面的代码后将向下执行第二个循环。这个循环和上面第一个循环类似。

好,我们看看程序的运行:

ba67ee534ce2dfb5d4f1f60301e4911b.jpeg

8129e16dc88752bb5cf572b5813e8e33.jpeg

当点击结束,程序将停止运行。

ebdb9b10895821c8129600b165183c05.jpeg

今日内容回向:

1 如何利用一个类的方法?

2 方法、事件的区别是什么?

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

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

94cfaf3988fb1c1ce37cb268cb41dd97.jpeg

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


cb6c5d9f52f5511b6eb59f95df936e2e.jpeg

cb579b55acdc3d7233b5b2bf1143c1bf.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/340434.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习_8、支持向量机

支持向量机解决鸢尾花数据集分类问题 # 导入鸢尾花数据集 from sklearn.datasets import load_iris import pandas as pd import numpy as npiris_data load_iris() Xiris_data.data yiris_data.target# 划分训练集与测试集 from sklearn.model_selection import train_test_…

软件测试|使用Pytest、Allure Step和Allure Attach创建详细测试报告

引言 在软件开发过程中&#xff0c;测试是不可或缺的一部分。为了更好地展示测试结果并定位问题&#xff0c;结合Pytest测试框架和Allure测试报告工具可以创建清晰、详细的测试报告。本文将介绍如何使用Pytest、Allure的allure.step()和allure.attach()功能来创建具有丰富信息…

大龄码农的业余作品:升讯威在线客服系统:系统架构设计

本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程。本产品已经成熟稳定并投入商用&#xff0c;并提供了多国语言版本&#xff0c;服务了一些海外客户。 本篇主要介绍系统的技术架构&#xff0c;从较高的抽象层次上解释我是怎样设计实现这样一套…

蓝桥杯练习题(二)

&#x1f4d1;前言 本文主要是【算法】——蓝桥杯练习题&#xff08;二&#xff09;的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 …

C#编程-实现多线程

实现多线程 多线程帮助同时执行各种操作。这为用户节省时间。多线程程序包括一个主线程和其他用户定义的线程以同时执行多个任务。 微处理器为执行的进程分配内存。每个进程占有内存中它们自己的地址空间。但是,所有在进程中的线程占有相同的地址空间。多线程允许在一个程序…

RHCE9学习指南 第20章 计划任务

有时需要在某个指定的时间执行一个操作&#xff0c;此时就要使用计划任务了。计划任务有两种&#xff1a;一个是at计划任务&#xff0c;另一个是crontab计划任务。 下面我们分别来看这两种计划任务的使用。 20.1 at at计划任务是一次性的&#xff0c;到了指定的时间点时就开始…

机器人行业概况(2)

上篇已经介绍过关于机器人的定义以及分类&#xff0c;下面来看看机器人产业市场规模。 二、国内机器人产业市场规模 中国机器人产业在国家智能制造相关政策的引导下蓬勃发展。在新冠肺炎疫情防控期间&#xff0c;消毒、配送、测温、巡检等各类机器人的“火线上岗”&#xff0…

SpringBoot+SSM项目实战 苍穹外卖(11)

继续上一节的内容&#xff0c;本节学习Apache ECharts&#xff0c;实现营业额统计、用户统计、订单统计和销量排名Top10功能。 数据统计效果图&#xff1a; 目录 Apache ECharts入门案例 营业额统计用户统计订单统计销量排名Top10 Apache ECharts Apache ECharts 是一款基于 …

130基于MATLAB并结合IBD算法的盲迭代反卷积法进行图像复原

基于MATLAB并结合IBD算法的盲迭代反卷积法进行图像复原 ,输出复原前后图像&#xff0c;PSF频谱结果。程序已调通&#xff0c;可直接运行。 130 matlab盲迭代反卷积IBD (xiaohongshu.com)

Netty-Netty组件了解

EventLoop 和 EventLoopGroup 回想一下我们在 NIO 中是如何处理我们关心的事件的&#xff1f;在一个 while 循环中 select 出事 件&#xff0c;然后依次处理每种事件。我们可以把它称为事件循环&#xff0c;这就是 EventLoop 。 interface io.netty.channel. EventLoo…

计算机系统总线

总线&#xff1a;连接计算机各个设备的公共信息。 数据总线&#xff0c;地址总线&#xff0c;控制总线 并行总线&#xff0c;串行总线 单总线结构&#xff0c;双总线结构&#xff0c;三总线结构 数据总线 CPU——内存———IO设备 双向传递数据。 地址总线 用于传输地址&am…

C练习——递归求第n个人年龄

题目&#xff1a; 有n个人坐在一起&#xff0c;第n个人比第n-1个人大2岁&#xff0c;第n-1个人比第n-2个人大2岁&#xff0c;以此类推&#xff0c;……&#xff0c;第1个人是10岁。请问第n个人年龄多大&#xff1f; 解析&#xff1a; 简单循环也能求解 但按题意要求递归求解…