对于这个问题,我的回答是:窗体,模块和类模块之间没有本质的,必然的联系。要有,也是按照编程的需要建立起来的一种对应关系。就一般意义而言,可以为一个窗体建立一个模块,来书写数量较多的代码,实现一些功能。也可以几个窗体共享一个模块。也就是说这种对应关系不是唯一的,要看具体需要。因为实际编程中,出于可读性和安全性的考虑,窗体区域内的代码量一般不会太多,基本就是一些初始化的代码,所以就引入了通用模块,在模块中编写功能代码。类模块也是模块,只不过是一种特殊的模块。类模块的代码具有比一般通用模块更强的针对性,它往往是为了表达类本身所具有的属性和行为,而且这种表达是比较全面的。类模块和模块一起合作,如果用的好的话,可以条理清晰地解决实际中一些复杂的问题。
模块即通用模块的引入是为了结构化编程的需要。在实际编程中,每一个模块中的代码常用来实现一个或一组类似的功能,模块中包括了要实现的功能的所有常量声明,变量定义,函数声明等等。模块通过声明和编写公共函数(Public Function或Function)与窗体或其他模块l链接,实现通信。
类模块,我的理解是VB为了能够实现面向对象编程而引入的,虽然不是真正意义上的面向对象。在实际编程中,类模块可以定义私有变量(Private)或公有变量(Public),私有变量只能被本类模块中的函数和事件过程使用,而公有变量能够被类在窗体或通用模块模块等非本类模块的位置实例化后访问。与模块类似,类模块中也可以定义公有函数与外部进行通信。类模块对于初学者理解起来可能有点难度,我在此就举个实例简单介绍一下如何建立和引用一个类模块:
1. 首先点击“工程”,选择“添加类模块”建立一个默认Name为Class1的类模块,类模块的命 名可以自行更改,但必须合法和唯一,它是唯一标识类的ID。我权且将它命名为Student。
2. 在类中定义几个变量,比如Private ID as long , Public stdName as string , Public Socre as Integer。在随便写几个函数比如Function AddData() , Private Function DeleteData()。
3. 双击击Form1,在“通用”区域输入Private Std as New Student(实例化类Student为Std)。在Form_Load事件中,输入"Std.",注意此时会跳出提示,VB自动为你列出了Std的成员属性stdName和Score以及事件AddData,你可能会奇怪为什么没有显示自己定义的所有成员,原因就在第二步中定义的变量和事件的范围不同,此时相信你应该明白当初定义Public和Private时两者的区别了。你如果在程序中强行引用类模块的私有变量,比如n=Std.ID,那么编译器就会报错“未找到方法或数据成员”。其实类模块可以跟VB中的控件联系起来。其实每一个控件相当于用类模块定义的类。比如TextBox是类的ID,Text1是TextBox的一个实例,Text1的Text,Visible等属性对应着TextBox类模块中定义的许多Public变量。而Text1的Change,MouseMove等事件对应着类模块中定义的许多Public函数或过程。如果你理解了这一点,相信你对类模块已经有了一个较完整的认识。
4. 还有一个最本质的问题,为什么要引入类模块,或者说这有什么好处呢?我的理解是:如果你要编程解决的问题很简单,那么类模块对你来说并无多大意义。但是如果你要编程处理一个复杂的问题,那么类模块就大有所为了。类模块在实际应用中按照面向对象编程的思想,把一个实际问题的行为主体抽象成一个个类,每个类的描述性属性构成类的成员变量,也称属性;类的成员的行为构成类的成员函数。(如编写一个学生信息管理系统时,可以抽象出用户类,学生类等;用户类有用户名,密码等属性,有增删改函数;学生类有学号,姓名等属性,有录入,删改等函数。等等。)这样做可以让你的代码集中起来,便于代码的重用和维护,也增强了可读性,提高了开发效率。
以上全部是我的个人观点,讲的不对的还望海涵。欢迎拍砖!
窗体是可视化的程序,其中可加载各个控件,而各个控制又可以写入相应的代码以响应用户的命令。模块是公用变量,公用函数的集合。各个窗体或类模块经常用到的函数变量可以放入模块,而不必要很次使用都重新编写。
类模块是没有窗体显示的代码集合。其现实的功能类似于窗体,但是却没有可见的东西。一般使用类模块多用于可升级的程序或操作数据的程序。举例说明,如果你的程序可升级,那么你将需升级的部分编写成类模块形式,那么每次升级时就可以仅给出类模块部分而不必改变整个程序。而在数据库应用中,类模块就可将操作某一个表的程序放入相应的模块,那么只要引用类模块就可以像控制控件一样,操作整个数据表的录入,修改等相关操作!