ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:23.61KB ,
资源ID:8951335      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8951335.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(浅显易懂的VB类入门教程.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

浅显易懂的VB类入门教程.docx

1、浅显易懂的VB类入门教程浅显易懂的VB类入门教程VB类的入门一直困扰了我很长时间,查阅了很多资料和文章,都是一笔带过,云里雾中的不能理解,通过本篇文章的学习才对VB的类有了一个初步的认识。qee用君“在VBA类:隐者的秘密 ”这篇教程中的讲述也很详细,但始终弄不懂属性过程Property Let 与Property Get的原理与作用。看完本教程才恍然大悟豁然开朗:原来之所以不明白属性过程Property Let 与Property Get的原理与作用,是因为我始终站在一个使用者角度去理解属性过程,所以怎么也搞不明白。类是制造对象的模板,要站在构造者的角度去理解,这样各种原理就会迎刃而解。 本

2、教程例子通过类生成器构建一个类,类构建完成以后,双击这个类,打开代码页面,可以看到类的架构代码。涿行代码仔细推敲,就会对类有个大致的了解。通过这个类生成器构建的类,可以发现,一个类的属性对应一对属性过程Property Let 与Property Ge 并且还有一个程序集变量。站在构建者的角度可以这么理解:当给这个类的一个实例对象的属性赋值的时候,调用Property Let过程,把所要赋的值存放在那个程序集变量中。当要读取一个对象的值的时候,就是读取那个程序集变量的值。(2011-8-24注)第一天:类的概念当您第一次看到“类”这个概念时,可能会觉得摸不着头脑。我们先看一点我们熟悉的东西:在

3、VB控件工具箱中的CommandButton,这是VB中的按钮控件,是我们在VB程序中经常用到的基本控件。我们在学习VB的类之前,单纯地就把它看成一个控件,其实,用类的观点,它就是一个类。我们知道,所有CommandButton都有相同的属性选项,尽管对于画到窗体上去的每个按钮,这些属性的值可能不同;它们也都有相同的事件,尽管我们对画到窗体上的每个按钮的这些事件地处理可能不同;它们也都有不同的方法,尽管我们调用每个画到窗体上的按钮的方法的目的不同。但,所有的窗体中的按钮都是CommandButton这一类控件。我们新建一个窗体,从控件工具箱中选中CommandButton并画到窗体上,这时,窗

4、体上就有了一个我们非常熟悉的Command1这个按钮。我们看看Command1这个东西,按照类的观点,它现在不能再叫做一个CommandButton控件(类)了,而叫做一个按钮,是CommandButton这个控件(类)的实例。所谓实例就是被具体化的类的一个形态,它有自己的属性,如高度和宽度,有自己的位置和大小,有自己的Caption和Name;它有自己的方法,如Move,当我们用Command1.Move这个方法时,谁都知道,只会移动Command1;它有自己的事件,如Click事件,当我们对Command1_Click进行代码编写后,只有Command1会调用我们对这个事件编写的代码。每当

5、我们在这个窗体上新画一个CommandButton,就新产生一个CommandButton的实例,每个新产生的按钮,都有自己的个性,但它们不会有CommandButton这个类所包含的属性项目以外的选择,比如Command1绝对不会有Max属性。我们再看第二个例子,这个例子我想跳出VB的范围,回到生活中来。比如我们常说,程序员是一类人,在这里,我们把程序员这类人就叫做一个类。这个类有一些属性,比如Name(姓名)、EmpolderTool(使用的开发工具);这个类有一些方法,比如Empolder(开发)、Study(学习);也同样有一些事件,比如EmpolderSucceed(开发成功)、Em

6、polderLost(开发失败)。我们现在来创建一个程序员类的实例,好让他可以做点事情。(要记住,没有实例化的类,只是一种概念上的东西,这种东西是什么也不能做的,就象日常生活中我们所见到的一样:程序员可以开发软件,但软件是由明确的属于这个类的一个实例开发出来的,比如求伯君写的WPS,求伯君是程序员这个类的一个实例,而不是这个类本身)。下面的代码是标准的VB代码,但却是还没有实际意义的代码因为您不要指望这段VB代码中的程序员类能为您写出一个VB程序来。vbOption Explicit定义一个对象变量,并指定这个变量属于这个类WithEvents使这个对象能响映事件Dim WithEvents

7、MyDeveloper As cDeveloperPrivate Sub Form_Load()Set MyDeveloper = New cDeveloper 这句一定要,这是初始化这个对象With MyDeveloper.Name = 求伯君 这个程序员叫做求伯君.EmpolderTool = C+ 这个程序员用C+进行开发.Empolder 调用Empolder方法使这个程序员进行开发工作End WithEnd Sub如果开发失败,则产生EmpolderLost这个事件Private Sub MyDeveloper_EmpolderLost()With MyDeveloper.Study

8、 如果开发失败,就让这个程序员进行学习.Empolder 学习后再次进行开发End WithEnd Sub如果开发成功,则这个程序员成为一个优秀的程序员Private Sub MyDeveloper_EmpolderSucceed()MsgBox 开发成功了! & MyDeveloper.Name & _成为了一个优秀的程序员, vbInformation, 恭喜End Sub/vb我不知道该不该拿求伯君他老人家来举例,但我想,他老人家开发WPS时一定没有我写这段代码这样简单。如果这段代码您有什么不明白,没有关系,我在以后的例子中会进一步说明的,或者您也可以查查MSDN。当然,不要去查Stud

9、y、.Empolder、EmpolderTool、cDeveloper这些东西,因为cDeveloper这个类和它的属性、方法和事件本来就是我想出来的,在MSDN中根本找不到对这些内容的支持。您最多能找到WithEvents这些肉容的帮助。好了,我举了两个例子,您对类的概念应该有些认识了吧。它就是一类对象的抽象后的集合我不知道这个定义是否是标准的,但我是这样理解的,好在这种理解并没对我在实际编写含有类模块的程序时遇到过什么麻烦。第二天:建立一个简单的类在第一天:类的概念中我们讲了类的概念。今天我们就再来看看如何创建上次用过的那个cDeveloper类是怎样创建的。首先:我们新建一个工程,然后在

10、“工程浏览器”中按鼠标右键,在弹出菜单中选择“添加”,在添加菜单项的下级菜单中选择“添加类模块”。在弹出的“添加类模块”对话框中双击“VB 类生成器”。接着,我们会看见类生成器对话框。现在我们点击工具栏上的第一个按钮,也就是添加新类的按钮。这时,会出现类模块生成器对话框。在这个对话框的属性选项卡上的“名称”(Name)文本框中输入cDeveloper在这个文本框下面还有一个“基于”(Based On)文本框,这里我们先不去管它,以会我会讲到它的。在这个对话框的“特性”选项卡中,有一个“描述”文本框,我们可以在里面输入对这个类的说明,比如:“这是一个程序员类”。然后我们按确定按钮退出“类模块生成

11、器”对话框。再接着我们看看原来的“类生成器”对话框中左边的树型浏览器中在原来的工程下面多了一个“cDeveloper”项。选中这个项,点击对话框工具栏上的第三个按钮(添加属性),这时会弹出“属性生成器”对话框。在这个对话框中的“属性”选项卡中的“名称”文本框中,我们输入:DeveloperName(这里有一点要注意,在“第一天”的例子中,我用的是Name属性,为什么在这里要用DeveloperName呢?因为Name是VB的保留字,如果您在这里输入了Name,VB会提示您出错的)。然后在“名称”文本框下面的“数据类型”下拉列表中选择”String”项(注意,一定要选择,如果您是输入的,因为大小

12、写的原因,最后生成的代码可能会有问题)。下面的“声明”栏中的选项先不要管它,以后再说。在这个对话框中的“特性”选项卡中的“描述”文本框中,您可以输入对这个属性的说明,比如:“这是程序员的姓名”。然后按确定按钮关闭这个“属性生成器”对话框。进行了上面的操作后,我们会发现,在“类生成器”对话框右边的属性选项卡中多了一项我们才添加的这个DeveloperName属性(您的“类生成器”对话框右边的选项卡可能没有选中“属性”这一页)。重复上面添加属性的操作,添加一个EmpolderTool属性,数据类型还是为String。到这时为止,我们的cDeveloper类就有了两个属性了。下面我们要为它添加两个方

13、法.Study和Empolder。要添加这两个方法,我们要点击“类生成器”对话框上的第四个按钮(添加新方法)。点击后会出现“方法生成器”对话框。在这个对话框中的“属性”选项卡中的名称文本框中,我们输入“Study”(这个文本框下面的内容(包括参数)我们先不去管它)。然后点确定关闭这个“方法生成器”对话框。重复上面添加方法的操作,添加一个Empolder方法。最后,我们就剩添加两个事件了。让我们点击“类生成器”工具栏上的第五个按钮(添加新事件),我们就会看到“事件生成器”对话框。我们在这个对话框中的名称文本框中输入“EmpolderSucceed”,下面的参数现在不用管它,以后介绍。重复添加新事

14、件的操作,在我们的类中添加“EmpolderLost”事件。现在我们的工作完成了,只要选择类生成器的“文件”菜单中的更新工程,这个cDeveloper类和它的属性、方法和事件就被添加到我们的工程中了,我们可以从“工程”浏览框中看到这个新加入的cDeveloper类模块。双击这个类模块,我们可以看见VB为这个类模块添加了下面这些代码:vbOption Explicit保持属性值的局部变量Private mvarDeveloperName As String 局部复制Private mvarEmpolderTool As String 局部复制要引发该事件,请遵循下列语法使用 RaiseEvent

15、:RaiseEvent EmpolderLost(arg1, arg2, . , argn)Public Event EmpolderLost()要引发该事件,请遵循下列语法使用 RaiseEvent:RaiseEvent EmpolderSucceed(arg1, arg2, . , argn)Public Event EmpolderSucceed()Public Sub Empolder()End SubPublic Sub Study()End SubPublic Property Let EmpolderTool(ByVal vData As String)向属性指派值时使用,位于赋

16、值语句的左边。Syntax: X.EmpolderTool = 5 mvarEmpolderTool = vDataEnd PropertyPublic Property Get EmpolderTool() As String检索属性值时使用,位于赋值语句的右边。Syntax: Debug.Print X.EmpolderTool EmpolderTool = mvarEmpolderToolEnd PropertyPublic Property Let DeveloperName(ByVal vData As String)向属性指派值时使用,位于赋值语句的左边。Syntax: X.Dev

17、eloperName = 5 mvarDeveloperName = vDataEnd PropertyPublic Property Get DeveloperName() As String检索属性值时使用,位于赋值语句的右边。Syntax: Debug.Print X.DeveloperName DeveloperName = mvarDeveloperNameEnd Property/vb我使用的是英文版的VB6,所以如果您使用的是中文版的VB6,见到的代码中的注释部份和我的不同,您的是中文的注释。第一句:Option Explicit。你也可能没有,但最好请您加上,这是强制声明的选项

18、,有了这一句之后,您的所有的变量都必须显示地声明后才能使用,这能一定程度上保证您的代码的正确性。您如果觉得跟着我用类生成器生成这个类太繁锁,没关系,您只要象添加窗体一样新添加一个类,并双击打开它,然后把上面的这段代码Copy到它里面也可以,反正以后我会对这些生成的代码进行说明的,当您熟悉这些代码的涵义后,用代码而不用类生成器有时反而更简单。对于这个生成的类,现在还只能对他的属性赋值,他还什么也不能做,这并不奇怪,因为我们还要添加代码告诉他该怎么做,该怎么响应事件。下次,在学习如何添加代码来完善我们的cDeveloper的功能前,先要解决掉一些细节问题。第三天、解决一些细节问题在第二天中,我们用

19、“类生成器”生成了一个cDeveloper类,这个类还什么也不能做,因为我们还没知诉他怎么做,这时,的cDeveloper类还象一个小婴儿,还只有一个人的样子,我们还要细心地一行一行代码地告诉他如何成为一个程序员。在我们进一步写代码之前,我们先看看下面的一些问题在看这些问题时,请您先把我们的类忘掉,一会儿再来说它。下面的这些问题对您也许太简单,但我认为,讲讲这些问题对理解类模块涵义的是有好处的。问题一、子过程您如果建立过子过程,一定知道下面语法的意义vbPublic Sub name (ParameterList)statementsExit SubstatementsEnd Sub这是创建一

20、个子过程的语法规则,用这个规则,您可以很简单地创建一个子过程,请看下面的代码Option ExplicitPrivate Sub Form_Load()Quotient 100, 30End SubPublic Sub Quotient(dblDividend As Double, dblDivisor As Double)Dim dblQuotient As DoubledblQuotient = dblDividend / dblDivisorMsgBox 您提供的两参数相除的结果是: & dblQuotientEnd Sub/vb在上的代码中,Quotient是我们创建的一个子过程。为什

21、么要创建这个子过程本来并不是我们在这里要讨论的问题,但我还是在这里再说几句。您也许会说把这个子过程中的内容放在Form_Load中一样可以而且还可以更简化代码。的确的,如果您的整个程序中只调用一次这种简单运算时,可以不象这样写,但如果有很多地方要用到这同一功能,而且这个功能也并不象上面代码中的简单的数学计算,而是一个相当复杂的功能时,根据程序模块化的原则,因该象上面一样把这些可重用的代码写成单独的模块,建立子过程和下面要提到的函数过程就是这其中的两种基本方法。问题二、函数过程我现在要对上面的代码进行一些修改:vbPrivate Sub Form_Load()MsgBox 您提供的两参数相除的结

22、果是: & Quotient(100, 30)End SubPublic Function Quotient(dblDividend As Double, dblDivisor As Double) As DoubleQuotient = dblDividend / dblDivisorEnd Function我们可以看到,Quotient现在已经可以返回一个值了,因为它已不再是子过程,而是一个函数过程了。函数过程的语法可以写成下面这样:Public Function name (ParameterList) As DataTypestatementsExit Functionstatemen

23、tsEnd Function /vb问题三、变量的作用范围。当我们用Private声明一个变量时,这个变量是模块级(module level)的变量,只有这个模块中的代码可以访问这个变量,对于模块外的调用,是不可用的。当我们用Public声明一个变量时,这个变量是也是模块级的变量,但他可以从所有的过程中所有的模块中调用。我们常称Public声明的变量为全局变量。下面,我们来重新回到我们建立的cDeveloper类模块上来。看看第二天中生成的那段代码吧:我把由类生成器生成的注释删除,只留下实际的代码。vbOption Explicit下面这两句是用Private定义的cDeveloper类模块的

24、内部变量,在这个类模块以外是无法访问这两个变量的,这两个变量是用来存储DeveloperName 和EmpolderTool的值的。Private mvarDeveloperName As StringPrivate mvarEmpolderTool As String下面这两句是定义的两个事件,语法很简单,不是吗?如果这个事件象MouseMove这种事件一样是要带参数的, 可以用Public Event EventName(Parameter1 as ParameterType,Parameter2 as ParameterType)这种方式来声明这个事件。Public Event Empo

25、lderLost()Public Event EmpolderSucceed()下面分别声明的是两个方法,通过上面的讨论,您可以看出来,这其实就是一个子过程。当您的方法是要返回值的时候,您就要把下而的子过程改写成一个函数过程,也就是把其中的Sub改成Function,并且声明返回值的类型,您也可以在“()”中加入要传递进去的参数。Public Sub Empolder()End SubPublic Sub Study()End Sub/vb下面的语句可以分为两种:一种是Property Let语句,当你对这个类的实例指定属性值时,这些Property Let语句会把您指定的值保存到这个实例的相

26、应的内部变量(前面提到的)中。 相当于Text1.Text=strMyString另一种是Proporty Get语句,当您读取这个类的实例的属性值时,这些Property Get语句会把您保存在它的相应的内部变量中的值读出并返回给您。相当于strMyString=Text1.Text这两种语句对于同一属性来说一般是成对出现的。这是一种理想情况,就是说这个属性可读可写。您有没有注意到,在VB中,有些控件的属性是只读的,比如我们用Command1.name = “cmd”这一句对Command1按钮的Name属性赋值时,是不会成功的。要让我们的类也有只读属性要怎么做呢?只要删除这个属性相关的Pr

27、operty Let语句就可以了。vbPublic Property Let EmpolderTool(ByVal vData As String)mvarEmpolderTool = vDataEnd PropertyPublic Property Get EmpolderTool() As StringEmpolderTool = mvarEmpolderToolEnd PropertyPublic Property Let DeveloperName(ByVal vData As String)mvarDeveloperName = vDataEnd PropertyPublic Pro

28、perty Get DeveloperName() As StringDeveloperName = mvarDeveloperNameEnd Property /vb当然,除了Proporty Get和Property Let语句以外,您也可能会见到另一种Proporty Set语句,那是当您的类的属性的数据类型为Variant或者别的对象变量(比如ADODB.Recordset)时会用到的。从上面的讨论,我们可以得出下面的结论:其实类模块就是由:一些变量、一些事件声明语句、一些Sub过程(为了和一般的Sub过程相区别,为了表明这是我们自定义的过程,我把它们叫做子过程)或一些函数过程、Pro

29、perty Let 语句、Property Get语句组成。这次,我们了解了类生成器给我们生成的这些东西的意义了,下次,我们将着手添加代码,让这个类能真的做点事。第四天、建立能做点事的类下面是我们在第二天里建立的cDeveloper类的代码框架,我将在这段代码里直接加上一些新的代码,让它能做一点事件。请注意比较下面的代码与第二天中的代码有什么不同。vbOption ExplicitPrivate mvarDeveloperName As String local copyPrivate mvarEmpolderTool As String local copyPublic Event Empo

30、lderLost()Public Event EmpolderSucceed()Public Sub Empolder()Dim intSucceed As Integer Msgbox返回的是Integer变量,所以这里定义为Integer变量,您当然也可以定义它为Long,因为Long的存储空间大于Integer.MsgBox 现在进行开发intSucceed = MsgBox(开发成功了吗?, vbYesNo + vbQuestion + vbDefaultButton2, 问题)If intSucceed = vbYes Then vbYes是一个VB常量,它的值是一个Integer型

31、的数据.RaiseEvent EmpolderSucceed 如果开发成功,则激发EmpolderSucceed事件ElseRaiseEvent EmpolderLost 如果没有开发成功,则激发EmpolderLost事件End IfEnd SubPublic Sub Study()MsgBox mvarDeveloperName & :请您进一步学习您的 & mvarEmpolderTool & 开发工具, vbInformation, 注意在这里,您看到了对mvarDeveloperName和mvarEmpolderTool的调用,因为这是从类的内部调用DeveloperName属性和EmpolderTool属性,所以可以直接访问存储这两个属性的模块内部变量mvarDeveloperName和mvarEmpolderTool.End SubPublic Property Let EmpolderTool(ByVal vData As String)mvarEmpolderTool = vDataEnd PropertyPublic Pr

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1