Visual Basic程序设计教程 第2版 教学课件作者 刘瑞新 电子教案 第8章 变量与过程的作用范围_第1页
Visual Basic程序设计教程 第2版 教学课件作者 刘瑞新 电子教案 第8章 变量与过程的作用范围_第2页
Visual Basic程序设计教程 第2版 教学课件作者 刘瑞新 电子教案 第8章 变量与过程的作用范围_第3页
Visual Basic程序设计教程 第2版 教学课件作者 刘瑞新 电子教案 第8章 变量与过程的作用范围_第4页
Visual Basic程序设计教程 第2版 教学课件作者 刘瑞新 电子教案 第8章 变量与过程的作用范围_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、在线教务辅导网:在线教务辅导网: :/教材其余课件及动画素材请查阅在线教务辅导网教材其余课件及动画素材请查阅在线教务辅导网QQ:349134187 或者直接输入下面地址:或者直接输入下面地址:第第8 8章章 变量与过程的作用范围变量与过程的作用范围第第8 8章章 变量与过程的作用范围变量与过程的作用范围 在在VB中,应用程序是由假设干个过程组成的,这些过中,应用程序是由假设干个过程组成的,这些过程一般保存在窗体文件程一般保存在窗体文件.frm或标准模块文件或标准模块文件.bas中。变量在过程中是必不可少的。根据变量或过程所处的中。变量在过程中是必不可少的。根据变量或过程所处的不同位置,可被访问

2、的范围是不相同的。变量与过程可被不同位置,可被访问的范围是不相同的。变量与过程可被访问的范围称为变量与过程的作用域。访问的范围称为变量与过程的作用域。v8.1 代码模块的概念代码模块的概念 在建立在建立VB的应用程序时,应首先设计代码的结构。的应用程序时,应首先设计代码的结构。VB应用程序的结构通常如图应用程序的结构通常如图8-1所示。所示。图图8-1 VB应用程序的结构应用程序的结构函数过程(Function)Sub过程事件过程窗体模块.Frm类模块.ClsSub过程函数过程(Function)标准模块.BasVB应用程序.VBP VB将代码存储在将代码存储在3种不同的模块中:窗体模块种不同

3、的模块中:窗体模块(窗体窗体)、标准模块模块和类模块。在这标准模块模块和类模块。在这3种模块中都可以包含种模块中都可以包含声明常数、变量、动态链接库声明常数、变量、动态链接库DLL的声明和过程的声明和过程Sub、Function、Property过程。它们形成了工程的一过程。它们形成了工程的一种模块层次结构,可以较好地组织工程,同时也便于代码种模块层次结构,可以较好地组织工程,同时也便于代码的维护,如图的维护,如图8-2所示。所示。图图8-2 工程中的模块工程中的模块8.1.1 8.1.1 窗体模块窗体模块 每个窗体对应一个窗体模块,窗体模块包每个窗体对应一个窗体模块,窗体模块包含窗体及其控件

4、的属性设置、窗体变量的说含窗体及其控件的属性设置、窗体变量的说明、事件过程、窗体内的通用过程、外部过明、事件过程、窗体内的通用过程、外部过程的窗体级声明。程的窗体级声明。 窗体模块保存在扩展名为窗体模块保存在扩展名为.frm.frm的文件中。默的文件中。默认时应用程序中只有一个窗体,因此有一个认时应用程序中只有一个窗体,因此有一个以以.frm.frm为扩展名的窗体模块文件。如果应用程为扩展名的窗体模块文件。如果应用程序有多个窗体,就会有多个以序有多个窗体,就会有多个以.frm.frm为扩展名的为扩展名的窗体模块文件。窗体模块文件。 如果要在文本编辑器中观察窗体模块,那如果要在文本编辑器中观察窗

5、体模块,那么还会看到窗体及其控件的描述,包括它们么还会看到窗体及其控件的描述,包括它们的属性设置值,如图的属性设置值,如图8-38-3所示。窗体模块中也所示。窗体模块中也可以引用该应用程序内的其他窗体或对象。可以引用该应用程序内的其他窗体或对象。 从从“ “工程菜单中执行工程菜单中执行“ “添加窗体命令,可添加窗体命令,可以添加新窗体模块。以添加新窗体模块。8.1.2 8.1.2 标准模块标准模块 标准模块保存在扩展名为标准模块保存在扩展名为.bas.bas的文件中,的文件中,缺省时应用程序中不包含标准模块。标准模缺省时应用程序中不包含标准模块。标准模块可以包含公有或模块级的变量、常数、类块可

6、以包含公有或模块级的变量、常数、类型、外部过程和全局过程的全局声明或模块型、外部过程和全局过程的全局声明或模块级声明。缺省时,标准模块中的代码是公有级声明。缺省时,标准模块中的代码是公有的,任何窗体或模块中的事件过程或通用过的,任何窗体或模块中的事件过程或通用过程都可以调用它。写入标准模块的代码不必程都可以调用它。写入标准模块的代码不必绑在特定的应用程序上,在许多不同的应用绑在特定的应用程序上,在许多不同的应用程序中可以重用标准模块。在标准模块中可程序中可以重用标准模块。在标准模块中可以存储通用过程,但不能存储事件过程。以存储通用过程,但不能存储事件过程。 从从“ “工程菜单中执行工程菜单中执

7、行“ “添加模块命令,可添加模块命令,可以在工程中添加标准模块。以在工程中添加标准模块。8.1.3 8.1.3 类模块类模块 在在VBVB中,类模块文件扩展名为中,类模块文件扩展名为.cls.cls是是面向对象编程的根底。程序员可在类模块中面向对象编程的根底。程序员可在类模块中编写代码建立新对象,这些新对象可以包含编写代码建立新对象,这些新对象可以包含自定义的属性和方法,可以在应用程序内的自定义的属性和方法,可以在应用程序内的过程中使用。实际上,窗体本身正是这样一过程中使用。实际上,窗体本身正是这样一种类模块,在其上可安放控件、可显示窗体种类模块,在其上可安放控件、可显示窗体窗口。窗口。 类模

8、块与标准模块的不同之处在于标准模类模块与标准模块的不同之处在于标准模块仅仅含有代码,而类模块既含有代码又含块仅仅含有代码,而类模块既含有代码又含有数据,类模块可以视为没有物理表示的对有数据,类模块可以视为没有物理表示的对象。象。v8.2 变量的作用范围变量的作用范围v 变量的作用范围作用域指变量能变量的作用范围作用域指变量能被某一过程识别的范围。当一个应用程序被某一过程识别的范围。当一个应用程序中出现多个过程或函数时,在它们各自的中出现多个过程或函数时,在它们各自的子程序中都可以定义自己的常量、变量。子程序中都可以定义自己的常量、变量。这时,自然会提出一个问题,这些常量或这时,自然会提出一个问

9、题,这些常量或变量是否在程序中到处可用?答复是否认变量是否在程序中到处可用?答复是否认的。的。v 在在VB中,可以在过程或模块中声明中,可以在过程或模块中声明变量,根据声明变量的位置,变量分为两变量,根据声明变量的位置,变量分为两类:过程级变量类:过程级变量Procedure level和和模块级变量模块级变量Module level。v 按照作用范围分类,过程级变量属于按照作用范围分类,过程级变量属于局部变量,而模块级变量那么属于全局变局部变量,而模块级变量那么属于全局变量。量。8.2.1 8.2.1 过程级变量过程级变量 在一个过程内部使用在一个过程内部使用DimDim或或StaticSt

10、atic关键字声关键字声明变量时,只有该过程内部的代码才能访问明变量时,只有该过程内部的代码才能访问或改变该变量的值,因此被称为或改变该变量的值,因此被称为“ “过程级变量过程级变量。过程级变量的作用范围限制在该过程内。过程级变量的作用范围限制在该过程内部。例如:部。例如:Dim a As Integer, b As SingleDim a As Integer, b As SingleStatic s As StringStatic s As String 如果在过程中未作说明而直接使用某个变如果在过程中未作说明而直接使用某个变量,该变量也被当成过程级变量。用量,该变量也被当成过程级变量。用

11、StaticStatic说说明的变量在应用程序的整个运行过程中都一明的变量在应用程序的整个运行过程中都一直存在,而用直存在,而用DimDim说明的变量只在过程执行时说明的变量只在过程执行时存在,退出过程后,这类变量就会消失。存在,退出过程后,这类变量就会消失。 过程级变量属于局部变量,只能在建立的过程级变量属于局部变量,只能在建立的过程内有效,即使是在主程序中建立的变量,过程内有效,即使是在主程序中建立的变量,也不能在被调用的子过程中使用。也不能在被调用的子过程中使用。【例【例8-1】过程级局部变量例如。】过程级局部变量例如。Private Sub Form_Activate() Dim a

12、As Integer, b As Integer, c As Integer 过程过程级局部变量级局部变量 a = 5: b = 3 Print Print Tab(15); a; Tab(25); b; Tab(35); c=a*b Print 调用调用Prod前前; Tab(14); a; Tab(24); b; Tab(34); c Call Prod Print 调用调用Prod后后; Tab(14); a; Tab(24); b; Tab(34); c Print Print 调用调用Sum前前; Tab(14); a; Tab(24); b; Tab(34); c Call Sum

13、 Print 调用调用Sum后后; Tab(14); a; Tab(24); b; Tab(34); cEnd SubSub Prod() 通用过程通用过程Dim a As Integer, b As Integer, c As Integer 过程过程级局部变量级局部变量图图8-7 程序运行结果程序运行结果 c = a * b Print Prod子过程; Tab(14); a; Tab(24); b; Tab(34); cEnd SubSub Sum() 通用过程 Dim a As Integer, b As Integer, c As Integer 过程级局部变量 c = a + b

14、Print Sum子过程; Tab(14); a; Tab(24); b; Tab(34); cEnd Sub 程序的运行结果如图程序的运行结果如图8-7所示。从上面程序的运行结果可所示。从上面程序的运行结果可以看出,主程序中的变量没有带到子过程中。以看出,主程序中的变量没有带到子过程中。8.2.2 8.2.2 模块级变量模块级变量 在模块的通用段中声明的变量属于模块级变量。模块级在模块的通用段中声明的变量属于模块级变量。模块级变量分为私有和公有。变量分为私有和公有。1. 私有的模块级变量私有的模块级变量 私有的模块级变量在声明它的整个模块的所有过程中都私有的模块级变量在声明它的整个模块的所有

15、过程中都能使用,但其他模块却不能访问该变量。声明方法是在模能使用,但其他模块却不能访问该变量。声明方法是在模块的通用段中使用块的通用段中使用Private或或Dim关键字声明变量。例如:关键字声明变量。例如:Private s As StringDim a As Integer, b As Single 在模块的通用段中使用在模块的通用段中使用Private或或Dim作用相同,但使用作用相同,但使用Private会提高代码的可读性。会提高代码的可读性。2. 公有的模块级变量公有的模块级变量 公有的模块级变量在所有模块中的所有过程中都公有的模块级变量在所有模块中的所有过程中都能使用。它的作用范围

16、是整个应用程序,因此公有能使用。它的作用范围是整个应用程序,因此公有模块级变量属于全局变量。声明方法是在模块的通模块级变量属于全局变量。声明方法是在模块的通用段中使用用段中使用Public关键字声明变量。例如:关键字声明变量。例如:Public a As Integer, b As Single 全局变量是指在所有程序包括主程序和过程全局变量是指在所有程序包括主程序和过程中都可以使用的内存变量。就像在一个过程中定义中都可以使用的内存变量。就像在一个过程中定义的变量一样,在子过程中可以任意改变和调用全局的变量一样,在子过程中可以任意改变和调用全局变量,当子过程执行完后,其值又带回主程序。变量,当

17、子过程执行完后,其值又带回主程序。 把变量定义为全局变量虽然很方便,但这样会增把变量定义为全局变量虽然很方便,但这样会增加变量在程序中被无意修改的时机,因此,如果有加变量在程序中被无意修改的时机,因此,如果有更好的处理变量的方法,就不要声明全局变量。另更好的处理变量的方法,就不要声明全局变量。另外,用外,用Const语句定义的符号常量也能声明为全局语句定义的符号常量也能声明为全局的。的。【例【例8-2】公有的模块级全局变量例如。】公有的模块级全局变量例如。Public a As Integer, b As Integer, c As Integer 写在写在“(通用通用)的的“(声明声明)中中

18、Private Sub Form_Activate() 事件事件过程过程 a = 5: b = 3 Print Tab(15); a; Tab(25); b; Tab(35); c=a*b Print 调用调用Prod前前; Tab(14); a; Tab(24); b; Tab(34); c Call Prod Print 调用调用Prod后后; Tab(14); a; Tab(24); b; Tab(34); c Print Print Tab(15); a; Tab(25); b; Tab(35); c=a+b Print 调用调用Sum前前; Tab(14); a; Tab(24);

19、b; Tab(34); c Call Sum Print 调用调用Sum后后; Tab(14); a; Tab(24); b; Tab(34); cEnd Sub图图8-8 程序运行结果程序运行结果Sub Prod() 通用过程 c = a * b Print Prod子过程; Tab(14); a; Tab(24); b; Tab(34); cEnd SubSub Sum() 通用过程 c = a + b Print Sum子过程; Tab(14); a; Tab(24); b; Tab(34); cEnd Sub 程序的运行结果如图程序的运行结果如图8-8所示。从程序的运行结果可以看所示。

20、从程序的运行结果可以看出,在模块级中用出,在模块级中用Public声明的全程变量声明的全程变量a、b、c,在各过,在各过程中都能访问和修改。程中都能访问和修改。8.2.3 8.2.3 变量的生存期变量的生存期 从变量的作用空间来说,变量有作用范围;从变量的作用空间来说,变量有作用范围;从变量的作用时间来说,变量有生存期。从变量的作用时间来说,变量有生存期。 假设过程内部有一个变量,当程序运行进假设过程内部有一个变量,当程序运行进入该过程时,要分配给该变量一定的内存单入该过程时,要分配给该变量一定的内存单元,一旦程序退出该过程,变量占有的内存元,一旦程序退出该过程,变量占有的内存单元是释放还是保

21、存,根据变量在程序运行单元是释放还是保存,根据变量在程序运行期间的生命周期,把变量分为静态变量期间的生命周期,把变量分为静态变量StaticStatic和动态变量和动态变量DynamicDynamic。静态变。静态变量不释放内存单元,动态变量释放内存单元,量不释放内存单元,动态变量释放内存单元,有时候可能需要某些局部变量是静态变量,有时候可能需要某些局部变量是静态变量,而其他变量那么为动态变量。而其他变量那么为动态变量。【例【例8-3】下面程序说明了】下面程序说明了Static关键字的作用。关键字的作用。Private Sub Form_Activate() Dim i As Integer

22、For i = 1 To 6 TestSub Next iEnd SubSub TestSub() Dim x As Integer, m As String图图8-9 程序运行结果程序运行结果 Static y, n x = x + 1: y = y + 1 m = m & *: n = n & * Print x=; x; y=; y, m=; m, n=; nEnd Sub 程序的运行结果如图程序的运行结果如图8-9所示。所示。 说明:说明:x、y、m、n都是过程都是过程TestSub中的局部变量,中的局部变量,y、n被说明为被说明为Static变量,每次调用保持上一次的

23、值,变量,每次调用保持上一次的值,y、n的的值会变化;值会变化;x、m是动态变量,每次调用都被重新初始化是动态变量,每次调用都被重新初始化为为0或或,它们的值总是不变。,它们的值总是不变。 为使过程中所有的局部变量为静态变量,可在过程头的为使过程中所有的局部变量为静态变量,可在过程头的起始处加上起始处加上Static关键字。例如:关键字。例如:Static Function RunningTotal (num) 这就使过程中的所有局部变量都变为静态,无论它们是这就使过程中的所有局部变量都变为静态,无论它们是用用Static、Dim或或Private声明的还是隐式声明的。声明的还是隐式声明的。v

24、8.3 过程的作用范围过程的作用范围v 过程也有作用的范围作用域,在过程也有作用的范围作用域,在VB中,过程的作用域分为模块级或称中,过程的作用域分为模块级或称文件级和全局级或称工程级。文件级和全局级或称工程级。v8.3.1 模块级过程模块级过程v 模块级过程是在某个模块文件内模块级过程是在某个模块文件内定义的过程。如果在定义的过程。如果在Sub或或Function前加前加关键字关键字Private,那么该过程只能被在本,那么该过程只能被在本模块文件中定义的过程调用。即其作模块文件中定义的过程调用。即其作用域为本模块文件。用域为本模块文件。8.3.2 8.3.2 全局级过程全局级过程 全局级过

25、程是在定义过程时,在全局级过程是在定义过程时,在SubSub或或FunctionFunction前加关键字前加关键字PublicPublic可以默认。全可以默认。全局级过程可被整个应用程序所有模块文件局级过程可被整个应用程序所有模块文件中定义的过程调用。即其作用域为整个应用中定义的过程调用。即其作用域为整个应用程序工程。程序工程。8.3.3 8.3.3 调用其他模块中的过程调用其他模块中的过程 在工程中的任何地方都能调用其他模块中在工程中的任何地方都能调用其他模块中的全局过程。调用其他模块中的过程的各种的全局过程。调用其他模块中的过程的各种技巧,取决于该过程是在窗体模块中、类模技巧,取决于该过

26、程是在窗体模块中、类模块中还是标准模块中。块中还是标准模块中。 (1) (1) 调用窗体中的过程调用窗体中的过程 所有窗体模块的外部调用必须指向包含此所有窗体模块的外部调用必须指向包含此过程的窗体模块。如果在窗体模块过程的窗体模块。如果在窗体模块Form1Form1中包中包含含SomeSubSomeSub过程,那么可使用下面的语句调过程,那么可使用下面的语句调用用Form1Form1中的过程:中的过程:Call Form1.SomeSub( arguments )Call Form1.SomeSub( arguments ) (2) 调用类模块中的过程调用类模块中的过程 与窗体中调用过程类似,

27、在类模块中调用过程要调用与与窗体中调用过程类似,在类模块中调用过程要调用与过程一致并且指向类实例的变量。例如,过程一致并且指向类实例的变量。例如,DemoClass是类是类Class1的实例:的实例:Dim DemoClass as New Class1 不同于窗体的是,在引用一个类的实例时,不能用类名不同于窗体的是,在引用一个类的实例时,不能用类名作限定符。必须首先声明类的实例为对象变量在这个例作限定符。必须首先声明类的实例为对象变量在这个例子中是子中是DemoClass,并用变量名引用它。,并用变量名引用它。 (3) 调用标准模块中的过程调用标准模块中的过程 如果过程名是唯一的,那么不必在

28、调用时加模块名。无如果过程名是唯一的,那么不必在调用时加模块名。无论是在模块内,还是在模块外调用,结果总会引用这个唯论是在模块内,还是在模块外调用,结果总会引用这个唯一过程。如过程仅出现在一个地方,这个过程就是唯一的。一过程。如过程仅出现在一个地方,这个过程就是唯一的。如果两个以上的模块都包含同名的过程,那就有必要用模如果两个以上的模块都包含同名的过程,那就有必要用模块名来限定了。块名来限定了。 例 如 , 假 设 在例 如 , 假 设 在 M o d u l e 1 中 调 用中 调 用 M o d u l e 2 中 的中 的CommonName过程,要用下面的语句:过程,要用下面的语句:

29、Module2.CommonName( arguments ) 【例【例8-4】全局级过程的调用,如图】全局级过程的调用,如图8-10所示。所示。 应用程序工程中包括两个窗体应用程序工程中包括两个窗体Forml、Form2和一和一个标准模块个标准模块Module1。在。在Forml窗体中定义了一个计算矩窗体中定义了一个计算矩形面积的全局级形面积的全局级Function过程,在标准模块过程,在标准模块Module1中定中定义了一个计算矩形周长的全局级义了一个计算矩形周长的全局级Function过程。过程。 两个窗体中的命令按钮组的两个窗体中的命令按钮组的Click事件过程功能相同,差事件过程功能

30、相同,差异是调用异是调用Function过程时所使用的名字。过程时所使用的名字。图图8-10 不同窗体对过程的调用不同窗体对过程的调用 Form1窗体模块中的过程代码如下:窗体模块中的过程代码如下:Public Function Area(x As Single, y As Single) As Single Area = x * yEnd FunctionPrivate Sub Command1_Click(index As Integer) Dim a As Single, b As Single a = Val(Text1(0).Text) b = Val(Text1(1).Text)

31、n = index If n = 0 Then Label2(0).Caption = Area(a, b) Else Label2(1).Caption = Perimeter(a, b) End IfEnd SubPrivate Sub Form_Load()End Sub Form2窗体模块中的过程代码如下:窗体模块中的过程代码如下:Private Sub Command1_Click(index As Integer) Dim a As Single, b As Single a = Val(Text1(0).Text) b = Val(Text1(1).Text) n = index

32、 If n = 0 Then Label2(0).Caption = Form1.Area(a, b) Else Label2(1).Caption = Perimeter(a, b) End IfEnd Sub 标准模块标准模块Module1中的过程代码:中的过程代码:Public Function Perimeter(x As Single, y As Single) As Single Perimeter = 2 * (x + y)End Functionv8.4 用户定义类型用户定义类型v8.4.1 用户定义类型的概念用户定义类型的概念v 假设某校的学生成绩见表假设某校的学生成绩见表8

33、-1。v表表8-1 学生成绩表学生成绩表v表中每列的数据类型相同,都是前面介表中每列的数据类型相同,都是前面介绍过的根本数据类型,在每一行中却有着绍过的根本数据类型,在每一行中却有着不同的数据类型。虽然使用不同的数据类型。虽然使用VB的的Variant数组允许数组内的元素有不同的数据类型,数组允许数组内的元素有不同的数据类型,但却比较浪费内存。此时,但却比较浪费内存。此时,VB允许将根允许将根本数据类型按需要组合起来,创立自定义本数据类型按需要组合起来,创立自定义的数据类型:用户定义类型的数据类型:用户定义类型User Defined Type。学 号姓 名性 别出生日期语 文数 学总 分99

34、310李小华男1985年2月22日859518099103张红玉女1986年5月18日73.587160.599311樊利友男1984年9月21日8279161 用户定义类型又被称为用户定义类型又被称为“记录类型,类似于记录类型,类似于C语言中语言中的的“结构。它是一个由假设干个根本类型的数据项组合结构。它是一个由假设干个根本类型的数据项组合而成的组合项。如表而成的组合项。如表8-1中的每一列都是根本类型的数据中的每一列都是根本类型的数据项,分别描述同一对象学生的不同属性,称为字段项,分别描述同一对象学生的不同属性,称为字段或称为数据项,字段的名称,如学号、姓名、性别、或称为数据项,字段的名称

35、,如学号、姓名、性别、出生日期等称为字段名或称数据项名。表中的记录类出生日期等称为字段名或称数据项名。表中的记录类型就是由这型就是由这7个数据项组成,其中每个学生的个数据项组成,其中每个学生的7个具体属性个具体属性值的集合就是记录值简称记录,表中共有值的集合就是记录值简称记录,表中共有3个记录值,个记录值,每位学生有每位学生有1个记录。如果该校有个记录。如果该校有2000名学生,那么该校名学生,那么该校学生成绩数据文件中就应该有学生成绩数据文件中就应该有2000个记录。个记录。8.4.2 8.4.2 创立用户定义类型创立用户定义类型 可以用可以用TypeType语句创立用户定义的类型,该语句创

36、立用户定义的类型,该语句必须置于模块的声明局部。其格式为:语句必须置于模块的声明局部。其格式为:Private | Public Type Private | Public Type 用户类型名用户类型名 字段名字段名1 1 As As 类型类型1 1 字段名字段名2 2 As As 类型类型2 2 字段名字段名n n As As 类型类型n n End TypeEnd Type 8.4.2 8.4.2 创立用户定义类型创立用户定义类型例如,要建立一个学生成绩处理程序,由于例如,要建立一个学生成绩处理程序,由于每一位学生都需要学号、姓名、学分和平均每一位学生都需要学号、姓名、学分和平均成绩等数

37、据项字段,那么可以使用成绩等数据项字段,那么可以使用TypeType语句来定义一个名称为语句来定义一个名称为studentrecstudentrec的记录。的记录。Private Type studentrecPrivate Type studentrec stunum As String stunum As String * * 6 6 学号元素学号元素为为6 6个字符的定长字符串个字符的定长字符串 names As String names As String * * 8 8 姓名元素姓名元素为为8 8个字符的定长字符串个字符的定长字符串 credit As Integer credit

38、As Integer 学学分元素为整型分元素为整型 avg As Single avg As Single 平平均成绩为单精度型均成绩为单精度型End TypeEnd Type8.4.3 8.4.3 建立和使用用户定义类型变量建立和使用用户定义类型变量 在使用用户定义类型之前,必须用在使用用户定义类型之前,必须用TypeType语语句创立数据类型。句创立数据类型。1. 1. 建立用户定义类型变量建立用户定义类型变量 用户定义类型被创立后,可以用用户定义类型被创立后,可以用DimDim、RedimRedim、StaticStatic建立一个具有这种数据类型的建立一个具有这种数据类型的变量。例如定

39、义一个具有变量。例如定义一个具有studentrecstudentrec类型类型的变量的变量stustu:Dim stu AS studentrecDim stu AS studentrec 用户定义类型也可以作为数组元素的数据用户定义类型也可以作为数组元素的数据类型。例如,定义一个拥有类型。例如,定义一个拥有100100个记录元素的个记录元素的数组数组studentstudent:Dim student(1 To 100) As studentrecDim student(1 To 100) As studentrec2. 使用用户定义类型变量使用用户定义类型变量 如果要存取用户定义类型变量

40、中的某个字段的数如果要存取用户定义类型变量中的某个字段的数据,其格式如下。据,其格式如下。用户数据类型变量名用户数据类型变量名.字段名字段名 例如,要存取用户定义类型变量例如,要存取用户定义类型变量stu中中names这这个字段的数据,要写为:。个字段的数据,要写为:。【例【例8-5】把数据值分别赋给】把数据值分别赋给stu变量中的各个字段。变量中的各个字段。 首先在窗体模块的通用段创立用户定义类型:首先在窗体模块的通用段创立用户定义类型:Private Type studentrec stunum As String * 6 学号元素学号元素为为6个字符的定长字符串个字符的定长字符串 nam

41、es As String * 8 姓名元素姓名元素为为8个字符的定长字符串个字符的定长字符串 credit As Integer 学分元素为整型学分元素为整型 avg As Single 平均成绩为单精平均成绩为单精度型度型End Type 编写命令按钮的编写命令按钮的Click事件代码:事件代码:Private Sub Command1_Click() Dim stu As studentrec 定义一个具有studentrec类型的变量stu = 990001 = 王 平 = 65 = 88 Text1(0).Text = Text1(1).Text = Text1(2).Text = T

42、ext1(3).Text = End Sub图图8-11 运行结果运行结果 程序运行结果如图程序运行结果如图8-11所示。所示。8.4.4 8.4.4 用户定义类型数组用户定义类型数组 如果一个数组中元素的数据类型是用户定如果一个数组中元素的数据类型是用户定义类型,那么称为用户定义类型数组或记录义类型,那么称为用户定义类型数组或记录数组数组Array of recordsArray of records。存取记录数组元。存取记录数组元素的某个字段数据的语法为:素的某个字段数据的语法为:记录数组元素记录数组元素. .字段名字段名 例如,存取第例如,存取第1 1、第、第2828位学生的平均分数,位

43、学生的平均分数,要写为要写为student(1).avgstudent(1).avgstudent(28).avgstudent(28).avg8.4.4 8.4.4 用户定义类型数组用户定义类型数组【例【例8-68-6】假设某班有】假设某班有5050位学生,每位学生一位学生,每位学生一个记录,定义一个包含个记录,定义一个包含5050个元素的用户定义个元素的用户定义数组,并给第数组,并给第3232位学生赋值。位学生赋值。 首先在窗体模块的通用段创立用户定义类首先在窗体模块的通用段创立用户定义类型:型:Private Type studentrecPrivate Type studentrec

44、stunum As String stunum As String * * 6 6 names As String names As String * * 8 8 credit As Integer credit As Integer avg As Single avg As SingleEnd TypeEnd Type 编写命令按钮的编写命令按钮的Click事件代码:事件代码:Private Sub Command1_Click() Dim student(1 To 50) As studentrec 定义记录数组定义记录数组 student(32).stunum = 960001 stud

45、ent(32).names = 张大力张大力 student(32).credit = 65 student(32).avg = 88 Text1(0).Text = student(32).stunum Text1(1).Text = student(32).names Text1(2).Text = student(32).credit Text1(3).Text = student(32).avgEnd Sub8.4.5 8.4.5 程序举例程序举例【例【例8-78-7】输入学生的姓名、学号、语文分数、】输入学生的姓名、学号、语文分数、英语分数、数学分数,计算每名学生的个人英语分数、数学

46、分数,计算每名学生的个人平均成绩,并显示学生的各科成绩,如图平均成绩,并显示学生的各科成绩,如图8-8-1212所示。所示。 首先在窗体的通用段创立用户定义类型并首先在窗体的通用段创立用户定义类型并且声明变量:且声明变量:Private Type studentRecordPrivate Type studentRecord name As String name As String * * 6 6 姓姓名变量定义为名变量定义为6 6个字符长度个字符长度 studentNum As String studentNum As String * * 5 5 学号变量定义为学号变量定义为5 5个字符

47、长度个字符长度 chinese As Single chinese As Single 语语文变量定义为单精度数文变量定义为单精度数 english As Single english As Single 英英语变量定义为单精度数语变量定义为单精度数 math As Single math As Single 数学变量数学变量定义为单精度数定义为单精度数 average As Single average As Single 平平均成绩定义为单精度数均成绩定义为单精度数End TypeEnd TypeDim stu() As studentRecordDim stu() As studentRecord 定定义记录数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论