《[VIP专享]模块与类模块的区别5815.pdf》由会员分享,可在线阅读,更多相关《[VIP专享]模块与类模块的区别5815.pdf(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、模块与类模块的区别?VB 的代码存储在模块中。在 VB 中提供了三种类型的模块:窗体模块、标准模块和类模块。简单的应用程序可以只有一个窗体,所用的程序都驻留在窗体模块中,而当应用程序庞大复杂时,就要另外附加窗体。最终可能有几个窗体中有一些共同都要执行的代码,为了在两个窗体中不产生重复代码,可创建一个独立的模块,用它实现代码公用。该独立模块即是标准模块。此外还可以建立包含共享代码与数据的类模块。每个标准模块、类模块和窗体模块可包含:声明。可将常数、类型、变量和动态链接库(DLL)过程的声明放在窗体、类或标准模块的声明部分。每个模块只有一个声明部分过程。每个模块可有多个过程,过程是划分 VB代码的
2、最小单元,每个过程是一个可执行的代码片段。VB 中主要有子过程、函数过程或者属性过程等各种模块类型1.窗体模块由于 VB 是面向对象的应用程序开发工具,所以应用程序的代码结构就是该程序在屏幕上表示的对应模型。根据定义,对象包含数据和代码。应用程序中的每个窗体都有一个相对应的窗体模块(文件扩展名为.frm)窗体模块是 VB 应用程序的基础。窗体模块可以包含处理事件的过程、通用过程以及变量、常数、自定义类型和外部过程的窗体级声明。写入窗体模块的代码是该窗体所属的具体应用程序专用的;也可以引用该程序内的其它窗体和对象每个窗体模块都包含事件过程,在事件过程中有为响应该事件而执行的程序段。窗体可包含控件
3、。在窗体模块中,对窗体上的每个控件都有一个对应的事件过程集。除了事件过程,窗体模块还可包含通用过程,它对来自该窗体中任何事件过程的调用都作出响应。2.标准模块标准模块是程序中的一个独立容器,包含全局变量、Function(函数)过程和 Sub 过程(子过程)。可将那些与特定窗体或控件无关的代码放入标准模块中。标准模块中包含应用程序内的允许其它模块访问的过程和声明。它们可以包含变量、常数、类型、外部过程和全局声明或模块级声明。写入标准模块的代码不必固定在特定的应用程序上;(1)使用标准模块在编写程序时,很可能会遇到一些使用相同变量和例程的窗体和事件过程。在缺省状态下,变量对于事件过程来说是局部的
4、,就是说仅能在创建这些变量的事件过程中读取或者修改变量。与之相似,事件过程对于创建它们的窗体来说也是局部。为了在工程中的所有窗体和事件中共享变量和过程,需要在该工程的一个或多个标准模块中对它们进行声明和定义。标准模块或代码模块是具有文件扩展名.bas,并包含能够在程序任何地方使用的变量和过程的特殊文件。正如窗体一样,标准模块被单 独列在 Project(工程)窗口内,并可通过使用 File(文件)菜单中的Save Modulel As 菜单项存盘。但是,与窗体不同,标准模块不包含对象或属性设置而只包含可在代码窗口中显示和编辑的代码。(2)创建标准模块如要在程序中创建新 的标准模块,那么单击工具
5、条 Add Form(添加窗体)按钮上的下箭头并单击 Mode(模块),或者单 击 Project(工程)菜单中的 Add Module(添加模块)菜单项。在工程中创建一个空的标准模块的步骤如下:S1:启动 VB,打开一个新的标准工程,单击工程 菜单中的 Add Module 菜单项,单击 Open 按钮。VB 在工程中增加一个名为 Module 的标准模块。该 模块对应的代码窗口被打开,对象和过程列表框的内容表明该 标准模块的通用声明已被打开。在此所声明的变量与过程 在整个程序都可以使用。S2:双击工程资源管理器窗口的标题条,以便能看到整个工程资源管理器窗口,S3:在 File(文件)菜单中
6、,单 击 Save Modulel AsS4:如果 D:/VB6sbs/less10 文件夹未被选择时,选择该文件夹,键入 MyTestMod.bas,然后按回车。该标准模块作为 MyTestMod.bas 文件保存到磁盘,并且可以通过 Project(工程)的 Add File 菜单项可将此文件通过其文件名加载到另一个工程中。S5:双击 Project(属性)窗口标题条。由于模块不包含对象,因此它惟一的属性就是 NameS6:将 Name 属性改为 modVariables,然后按 ENTER 键。(3)声明公用变量在标准模块中声明 全局变量十分简单,键入关键字 Public,后跟该 变量名
7、。缺省状态下,公用就量在模块中被声明为变体类型,但是可以通过使用 As 关键字来指定相应类型,可以把公用变量声明为某个指定的基本类型。3.类模块在 VB 中类模块是面向对象编程的基础。可以在类模块中编写代码建立新对象。这些新对象可以包含自定义的属性和方法。实际上,窗体正是这样一种类模块,在其上可安放控件,可显示窗体窗口用类模块创建对象,这些对象可被应用程序内的过程调用。标准模块只包含代码,而类模块包含代码又包含数据,可视为没有物理表示的控件。模块设计的考虑在 VB 中创建应用程序的最重要的部分是设计阶段。首先需要为应用程序设计一个用户界面,这个界面的设计比较容易确定。但设计代码的结构就是一项较
8、复杂的工作。构造应用程序的方法不同,可能会造成应用程序的性能以及代码的可维护性,可使用性不同。VB 应用程序呈层次结构。典型应用程序包括若干个模块:应用程序中每个窗体的窗体模块、共享代码的标准模块和类模块。每个模块包含若干含 有代码的过程:Event 过程,Sub 过程或 Function 过程及 Property 过程。在很多情况中都存在着多个对象共享的重复过程。这种情况最好创建一个共享的子过程,使大家都可以调用它。即使将来修改这些子程序,则只在一个地方修改就可进行全部修改,这将大大提高程序的可读性和可维护性。可以把所有的共享操作放在标准的模块中。标准模块标准模块(文件扩展名为.BAS)是应
9、用程序内其它模块访问的过程和声明的容器。它们可以包含变量、常数、类型、外部过程和全局过程的全局(在整个应用程序范围内有效的)声明或模块级声明。写入标准模块的代码不必绑在特定的应用程序上;如果不小心用名称引用窗体和控件,则在许多不同的应用程序中可以重用标准模块。类模块在 Visual Basic 中类模块(文件扩展名为 .CLS)是面向对象编程的基础。可在类模块中编写代码建立新对象。这些新对象可以包含自定义的属性和方法。实际上,窗体正是这样一种类模块,在其上可安放控件、可显示窗体窗口。momofufu检举给你简单举几个例子:-以下为模块内容 Public Sub test1(a As Integ
10、er,b As Integer)带参数的模块 MsgBox a+b End Sub Function test2(a As Integer,b As Integer)As Integer 有返回值的模块 test2=a+b 计算 a,b 相加的值返回结果 End Function 以下为窗体代码 3 个 command Private Sub Command1_Click()test1 5,6 使用 test1 模块 End Sub Private Sub Command2_Click()有返回值的模块使用 MsgBox test2(3,9)End Subvb 类模块如何使用模块内容.比如模块
11、名为 Global(Public)Sub AspToDll_Initialize()End Sub 类模块名为 MyclassPrivate Sub Class_Initialize()Set AspToDll_Object=Me 当类模块引用模块为名是 Me 而不是 Global AspToDll_Initialize End Sub 小弟新手不懂,帮忙解释下 lengxfy采纳率:47%4 级 2013.06.25检举Myclass 是一个类,类需要实例化才能使用 什么是实例化,我估计你不懂 这样理解,你把一个游戏装到电脑上,这个游戏就是一个类 你双击打开它,就算是一个实例,再打开一个,又
12、是一个实例 虽然你打开两次,但是两个游戏窗口是独立的,输了一个,不影响另一个,可能是赢的 你在模块中,首先要定义一个类的实例名,你的代码中是 AspToDll_Object 这里面的 ME,就是自己的意思,每个类被实例化了之后,就像一个人一样,有各种属性,Me 就是英语自己。就像刚才的两个游戏窗口,第一个里面可以叫自己是 A,第二个可以叫自己是 B,但是在自己的窗口说自己,就一定是 A 自己或者 B 自己,我说的不是网游,可以理解为一次性的游戏,打完输入玩家名字,记录成绩的那种 而在类里面调用模块内容,就很简单,直接调用模块中的函数名就行了 上面的代码中,是直接调用了初始化的函数 AspToD
13、ll_Initialize 类的化,需要名字.函数名。比如说,模块中调用 AspToDll_Object.函数名。类模块自己调用自己,就不需要了,直接写就行了,就像欠想动一下,只要脑子里面想一下就行了。而别人要你动,就要说,某某某,动一下。看明白了么?VB 类模块属性问题wkh2019 3 级 被浏览 5 次 2014.01.21为什么要用 LET 和 GET 来对属性进行处理呢?直接在类模块通用段声明不就行了吗?两者有什么分别?例如有模块 clsPnt 在通用声明 public x as integer 使用时可以用 Pnt.x=123 赋值同时也可以直接 Pnt.x 来获取 X 值 但为什
14、么我看到很多代码都是把 x 定义成 private,然后加 Let 方法来赋值,再用 Get 方法来获取呢?这样不是很麻烦么?检举这样可以防止不可预料的赋值求个 VB 类模块使用例子检举本示例演示了如何用类模块定义类(然后可以用它创建对象)。还将展示如何为新的类创建属性和方法并演示对象是如何创建和撤消的。打开一个新的“标准 EXE”工程,在“工程”菜单中选中“添加类模块”插入一个类模块。在窗体上画四个按钮。下表列出了本示例中要设置的对象属性值。对象 属性 设置值 Class 类模块 Name Thing Command1 Caption 显示该 Thing Command2 Caption 颠
15、倒该 Thing 的名称 Command3 Caption 创建新的 Thing Command4 Caption 临时的 Thing 注意 类模块保存在扩展名为.cls 的文件中。添加下列代码到类模块的声明段:Option Explicit Public Name As String Private mdtmCreated As Date 变量 Name 将成为 Thing 对象的属性,因为它声明为 Public。注意 不要把这个 Name 属性和上表设置的类模块的 Name 属性混淆(类模块的 Name 属性为 Thing 类提供了名称)。为什么要给 Thing 类命名呢?最好应该反过来问
16、,为什么不?应该给 Thing 类一个名称因为事物总是有名称的!应该知道 Visual Basic 使用属性和方法的名称并没有什么特殊点。可以为自己不同的类使用相同的属性和方法名。变量 mdtmCreated 是私有数据成员,用于存储只读的 Created 属性的值。Created 属性返回 Thing 对象产生的日期和时间。为了实现 Created 属性,将以下 Property Get 代码添加到类模块的声明部分:Property Get Created()As Date Created=mdtmCreated End Property 注意 如果通过“工具”菜单下的“添加过程”对话框添加
17、属性过程,应确认删除了 Property Let 声明,它是通过本对话框自动添加的。Property Let 只用于读写属性,参见“运用属性过程”部分。Thing 对象有一个方法 ReverseName,用于颠倒 Name 属性的字母顺序。它不返回值,因此是一个 Sub 过程。向类模块添加以下 Sub 过程。Public Sub ReverseName()Dim intCt As Integer Dim strNew As String For intCt=1 To Len(Name)strNew=Mid$(Name,intCt,1)&strNew Next Name=strNew End S
18、ub 类模块有两个事件:Initialize 和 Terminate。从类模块的“对象”下拉列表中,选择“类”。下拉出的“过程”列表将显示事件。将以下代码放到事件过程中:Private Sub Class_Initialize()设置对象创建的日期/时间,由只读的 Created 属性返回。mdtmCreated=Now 显示对象属性。MsgBox Name:&Name&vbCrLf&Created:_&Created,Thing Initialize End Sub Private Sub Class_Terminate()显示对象属性。MsgBox Name:&Name&vbCrLf&Cr
19、eated:_&Created,Thing Terminate End Sub 一般 Initialize 事件包含了对象创建时所需的所有代码,如为 Created 属性提供时间标记。Terminate 事件包含撤消对象后进行清理的所有代码。本示例中,两个事件主要用来提供 Thing 对象创建或撤消的可视化指示。Thing 对象的使用 添加以下代码到窗体模块的声明段:Option Explicit Private mth As Thing 变量 mth 保存了对一个 Thing 对象的引用,该对象是在窗体的 Load 事件中产生的。将以下代码分别添加到 Form_Load 事件过程及四个按钮的
20、 Click 事件过程中。Private Sub Form_Load()Set mth=New Thing mth.Name=InputBox(Enter a name for the Thing)End Sub 按钮“显示该 Thing”Private Sub Command1_Click()MsgBox Name:&mth.Name&vbCrLf _&Created:&mth.Created,Form Thing End Sub 按钮“颠倒该 Thing 的名称”Private Sub Command2_Click()mth.ReverseName 单击“显示该 Thing”Command
21、1.Value=True End Sub 按钮“创建新的 Thing”Private Sub Command3_Click()Set mth=New Thing mth.Name=InputBox(_ Enter a name for the new Thing)End Sub 按钮“临时的 Thing”。Private Sub Command4_Click()Dim thTemp As New Thing thTemp.Name=InputBox(_ Enter a name for the Temporary Thing)End Sub 运行工程 按 F5 键运行该工程。观察 Form_L
22、oad 事件过程可知 New 操作符用于创建 Thing 对象。对该对象的引用赋给了变量 mth。InputBox 函数要求输入 Thing 的名称。输入名称并按 ENTER 键后,返回值被赋予 Thing 对象的 Name 属性。显示窗体 Thing 可以通过按下第一个按钮“显示该 Thing”来验证所赋的 Name 属性值,此时将显示一个包含了 Thing 对象所有属性的消息框。颠倒 Thing 的名称 按第二个按钮“颠倒该 Thing 的名称”。该按钮调用 ReverseName 方法把 Thing 对象的名称倒过来,然后按第一个按钮显示更新过的属性值。创建新的 Thing 单击“创建新
23、的 Thing”按钮撤消已存在的 Thing 对象后再创建一个新的对象。(或,反过来进行,创建一个新的 Thing 对象然后撤消旧的。)New 操作符创建一个新的 Thing,因此可以看见新 Thing 的 Initialize 事件显示的消息框。单击“确定”,对新 Thing 的引用被赋给了窗体级的变量 mth。这样做清除了对旧的 Thing 的引用。由于不再有引用,所以它被撤消,因此可以看到 Terminate 事件的消息框。单击“确定”后,InputBox 语句要求输入新 Thing 的名称。注意 如果希望在创建新的 Thing 之前撤消旧的,可以添加代码 Set mth=Nothing
24、 到事件过程的开始部分。临时的 Thing 第四个按钮演示了对象存活期的另一个方面。按下后,将提示输入临时 Thing 的名称。可是等一等,这还不是一个临时的 Thing 对象。还没有见到其 Initialize 消息框,怎么赋给它名称呢?由于变量 thTemp 已被 As New 声明过了,因此当一个属性或方法被使用时就会创建 Thing 对象。这将发生在输入框返回的值被赋给 Name 属性时。在输入框键入名称后单击“确定”。此时可以看到 Initialize 的消息框,其中的 Name 属性还是空白。当单击“确定”关闭消息框后,InputBox 语句的值终于赋给了 Name 属性。看看这一
25、行代码作了多少事。当然,当完成了这一切后,Click 事件过程也结束了,变量 thTemp 也超出可见范围,对临时 Thing 的对象引用也被释放,因此可以看到 Thing 的 Terminate 消息框,注意其中包含所提供的名称。每次单击该按钮将创建另一个临时 Thing,并进行命名,将它撤消。关闭程序 单击窗体的“关闭”按钮可终止应用程序。不要使用工具栏上的 End 按钮。应用程序终止时,Form1 被撤消。变量 mth 也超出可见范围,Visual Basic 清除对 Thing 的引用。由于已不存在对 Thing 的引用,因此被撤消并显示 Terminate 事件的消息框。再次运行应用
26、程序,这次用工具栏上的 End 按钮终止程序。注意这时没有显示 Thing 对象的 Terminate 消息框。应特别记住使用 End 按钮终止应用程序或在代码中用 End 语句立即退出应用程序,并不能运行任何对象的 Terminate 事件。最好能通过卸载所有的窗体来关闭应用程序。通过 F8 键以每次运行一行代码的形式运行示例,是一个很有用的方法。这有利于理解创建和撤消对象的事件的顺序。重点 在实际的应用程序中,Initialize 和 Terminate 事件不应包含消息框或其它任何使 Windows 显示消息的代码。一般来说,调试对象的存活期时最好用 Debug.Print 语句。类模块
27、与标准模块的区别标准模块和类模块的区别:1 标准模块实际上就是一个存放着变量和过程的一个单获的文件,它是非对象化的,而类模块是一个自定义的类,主要是通过面向对象的。2 标准模块和类模块的存储数据方法不同。标准模块的数据只有一个备份,每次读取时都是相同的值,而类模块中的数据是相对于类模块获立存在的。3 当变量在标准模块中声明为 Public 时,则它在工程中任何地方是可见的;而类模块中的 Public 变量,只有当对象变量含有对某一类实例的引用时才能访问。4 类模块必须要先在程序里进行引用,然后才可以使用。而公共模块则不须要进行引用,就可以直接使用。5 类模块是集结了公共模块中具有相同的方法或属
28、性的模块内容。类模块主要是用来把一些经常要用到的操作结合在一起,和模块不同的是,他的内容都是和一种对象有关的类模块运用得好的话可以方便很多很多(用过 MFC编程就会很清楚)类模块很像结构体,不同的是,类模块的成员还可以有函数(在 MFC 中,结构体就是一个特殊的类)例子的话我就不会写了,VB 没学类模块,是我的遗憾大概说说就可以 _比如有个 动物园 的程序,里面有 很多动物但每个动物都要做相同的动作:吃饭,睡觉然后你就可以在类模块(假设一个叫 Amimal 的类)里写好 吃饭(eat(),睡觉(sleep()的函数(就是吃饭是要怎么做,睡觉时要怎么做)然后把动物定义为那个类定义我还是会的:di
29、m Monkey as New Animaldim Dog as New Animal然后就可以调用 Animal 的函数了Monkey.sleep()这样,Monkey 就会去睡觉了Dog.eat()控件也是一个类,不过你看不到它的类模块而已Text1.text=abc Text1 是 TextBox 这个类的,而 TextBox 里有个叫 text 的成员本人表达能力不好,不懂可以来找我评论(0)40其他回答(1)风画犹诗 6 级 2008-08-221、模块是.bas 文件,主要用于将代码分别存放,便于管理。类模块是.cls 文件,主要用于定义类和设计 ActiveX EXE、ActiveX DLL。在 VB 中选择“工程|添加类模块”就可以在工程中加入一个类模块。然后,可以使用菜单中的“添加过程”命令添加属性、方法和事件。评论(0)0