分享
分销 收藏 举报 申诉 / 42
播放页_导航下方通栏广告

类型vb变量与过程的作用范围.ppt

  • 上传人:天****
  • 文档编号:3255449
  • 上传时间:2024-06-27
  • 格式:PPT
  • 页数:42
  • 大小:223.50KB
  • 下载积分:12 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    vb 变量 过程 作用 范围
    资源描述:
    第第8 8章章 变量与过程的作用范围变量与过程的作用范围1第第8 8章章 变量与过程的作用范围变量与过程的作用范围 在在VB中中,应应用用程程序序是是由由若若干干个个过过程程组组成成的的,这这些些过过程程一一般般保保存存在在窗窗体体文文件件(.frm)或或标标准准模模块块文文件件(.bas)中中。变变量量在在过过程程中中是是必必不不可可少少的的。根根据据变变量量或或过过程程所所处处的的不不同同位位置置,可可被被访访问问的的范范围围是是不不相相同同的的。变变量量与与过过程程可可被被访访问问的的范围称为变量与过程的作用域。范围称为变量与过程的作用域。v8.1 代码模块的概念代码模块的概念 在在建建立立VB的的应应用用程程序序时时,应应首首先先设设计计代代码码的的结结构构。VB应用程序的结构通常如图应用程序的结构通常如图8-1所示。所示。图图8-1 VB应用程序的结构应用程序的结构 VB将将代代码码存存储储在在3种种不不同同的的模模块块中中:窗窗体体模模块块(窗窗体体)、标标准准模模块块(模模块块)和和类类模模块块。在在这这3种种模模块块中中都都可可以以包包含含声声明明(常常数数、变变量量、动动态态链链接接库库DLL的的声声明明)和和过过程程(Sub、Function、Property过过程程)。它它们们形形成成了了工工程程的的一一种种模模块块层层次次结结构构,可可以以较较好好地地组组织织工工程程,同同时时也也便便于于代代码码的的维维护护,如图如图8-2所示。所示。图图8-2 工程中的模块工程中的模块8.1.1 8.1.1 窗体模块窗体模块 每每个个窗窗体体对对应应一一个个窗窗体体模模块块,窗窗体体模模块块包包含含窗窗体体及及其其控控件件的的属属性性设设置置、窗窗体体变变量量的的说说明明、事事件件过过程程、窗窗体体内内的的通通用过程、外部过程的窗体级声明。用过程、外部过程的窗体级声明。窗窗体体模模块块保保存存在在扩扩展展名名为为.frm的的文文件件中中。默默认认时时应应用用程程序序中中只只有有一一个个窗窗体体,因因此此有有一一个个以以.frm为为扩扩展展名名的的窗窗体体模模块块文文件件。如如果果应应用用程程序序有有多多个个窗窗体体,就就会会有有多多个个以以.frm为为扩展名的窗体模块文件。扩展名的窗体模块文件。如如果果要要在在文文本本编编辑辑器器中中观观察察窗窗体体模模块块,则则还还会会看看到到窗窗体体及及其其控控件件的的描描述述,包包括括它它们们的的属属性性设设置置值值,如如图图8-3所所示示。窗体模块中也可以引用该应用程序内的其他窗体或对象。窗体模块中也可以引用该应用程序内的其他窗体或对象。从从“工工程程”菜菜单单中中执执行行“添添加加窗窗体体”命命令令,可可以以添添加加新新窗窗体体模块。模块。8.1.2 8.1.2 标准模块标准模块 标标准准模模块块保保存存在在扩扩展展名名为为.bas的的文文件件中中,缺缺省省时时应应用用程程序序中中不不包包含含标标准准模模块块。标标准准模模块块可可以以包包含含公公有有或或模模块块级级的的变变量量、常常数数、类类型型、外外部部过过程程和和全全局局过过程程的的全全局局声声明明或或模模块块级级声声明明。缺缺省省时时,标标准准模模块块中中的的代代码码是是公公有有的的,任任何何窗窗体体或或模模块块中中的的事事件件过过程程或或通通用用过过程程都都可可以以调调用用它它。写写入入标标准准模模块块的的代代码码不不必必绑绑在在特特定定的的应应用用程程序序上上,在在许许多多不不同同的的应应用用程程序序中中可可以以重重用用标标准准模模块块。在在标标准准模模块块中中可可以以存存储储通通用过程,但不能存储事件过程。用过程,但不能存储事件过程。从从“工工程程”菜菜单单中中执执行行“添添加加模模块块”命命令令,可可以以在在工工程程中中添添加标准模块。加标准模块。8.1.3 8.1.3 类模块类模块 在在VB中中,类类模模块块(文文件件扩扩展展名名为为.cls)是是面面向向对对象象编编程程的的基基础础。程程序序员员可可在在类类模模块块中中编编写写代代码码建建立立新新对对象象,这这些些新新对对象象可可以以包包含含自自定定义义的的属属性性和和方方法法,可可以以在在应应用用程程序序内内的的过过程程中中使使用用。实实际际上上,窗窗体体本本身身正正是是这这样样一一种种类类模模块块,在其上可安放控件、可显示窗体窗口。在其上可安放控件、可显示窗体窗口。类类模模块块与与标标准准模模块块的的不不同同之之处处在在于于标标准准模模块块仅仅仅仅含含有有代代码码,而而类类模模块块既既含含有有代代码码又又含含有有数数据据,类类模模块块可可以以视视为为没没有物理表示的对象。有物理表示的对象。v8.2 变量的作用范围变量的作用范围 变变量量的的作作用用范范围围(作作用用域域)指指变变量量能能被被某某一一过过程程识识别别的的范范围围。当当一一个个应应用用程程序序中中出出现现多多个个过过程程或或函函数数时时,在在它它们们各各自自的的子子程程序序中中都都可可以以定定义义自自己己的的常常量量、变变量量。这这时时,自自然然会会提提出出一一个个问问题题,这这些些常常量量或或变变量量是是否否在在程程序序中中到到处处可可用?回答是否定的。用?回答是否定的。在在VB中中,可可以以在在过过程程或或模模块块中中声声明明变变量量,根根据据声声明明变变量量的的位位置置,变变量量分分为为两两类类:过过程程级级变变量量(Procedure level)和和模块级变量(模块级变量(Module level)。)。按按照照作作用用范范围围分分类类,过过程程级级变变量量属属于于局局部部变变量量,而而模模块块级变量则属于全局变量。级变量则属于全局变量。8.2.1 8.2.1 过程级变量过程级变量 在在一一个个过过程程内内部部使使用用Dim或或Static关关键键字字声声明明变变量量时时,只只有有该该过过程程内内部部的的代代码码才才能能访访问问或或改改变变该该变变量量的的值值,因因此此被被称称为为“过过程程级级变变量量”。过过程程级级变变量量的的作作用用范范围围限限制制在在该该过过程程内部。例如:内部。例如:Dim a As Integer,b As SingleStatic s As String 如如果果在在过过程程中中未未作作说说明明而而直直接接使使用用某某个个变变量量,该该变变量量也也被被当当成成过过程程级级变变量量。用用Static说说明明的的变变量量在在应应用用程程序序的的整整个个运运行行过过程程中中都都一一直直存存在在,而而用用Dim说说明明的的变变量量只只在在过过程程执执行时存在,退出过程后,这类变量就会消失。行时存在,退出过程后,这类变量就会消失。过过程程级级变变量量属属于于局局部部变变量量,只只能能在在建建立立的的过过程程内内有有效效,即即使使是是在在主主程程序序中中建建立立的的变变量量,也也不不能能在在被被调调用用的的子子过过程程中使用。中使用。【例【例8-1】过程级局部变量示例。】过程级局部变量示例。Private Sub Form_Activate()Dim a 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 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 Print Sum子过程;Tab(14);a;Tab(24);b;Tab(34);cEnd Sub 程程序序的的运运行行结结果果如如图图8-7所所示示。从从上上面面程程序序的的运运行行结结果果可可以看出,主程序中的变量没有带到子过程中。以看出,主程序中的变量没有带到子过程中。8.2.2 8.2.2 模块级变量模块级变量 在在模模块块的的通通用用段段中中声声明明的的变变量量属属于于模模块块级级变变量量。模模块块级级变量分为私有和公有。变量分为私有和公有。1.私有的模块级变量私有的模块级变量 私私有有的的模模块块级级变变量量在在声声明明它它的的整整个个模模块块的的所所有有过过程程中中都都能能使使用用,但但其其他他模模块块却却不不能能访访问问该该变变量量。声声明明方方法法是是在在模模块的通用段中使用块的通用段中使用Private或或Dim关键字声明变量。例如:关键字声明变量。例如:Private s As StringDim a As Integer,b As Single 在在模模块块的的通通用用段段中中使使用用Private或或Dim作作用用相相同同,但但使使用用Private会提高代码的可读性。会提高代码的可读性。2.公有的模块级变量公有的模块级变量 公公有有的的模模块块级级变变量量在在所所有有模模块块中中的的所所有有过过程程中中都都能能使使用用。它它的的作作用用范范围围是是整整个个应应用用程程序序,因因此此公公有有模模块块级级变变量量属属于于全全局局变变量量。声声明明方方法法是是在在模模块块的的通通用用段段中中使使用用Public关关键键字声明变量。例如:字声明变量。例如:Public a As Integer,b As Single 全全局局变变量量是是指指在在所所有有程程序序(包包括括主主程程序序和和过过程程)中中都都可可以以使使用用的的内内存存变变量量。就就像像在在一一个个过过程程中中定定义义的的变变量量一一样样,在在子子过过程程中中可可以以任任意意改改变变和和调调用用全全局局变变量量,当当子子过过程程执执行行完后,其值又带回主程序。完后,其值又带回主程序。把把变变量量定定义义为为全全局局变变量量虽虽然然很很方方便便,但但这这样样会会增增加加变变量量在在程程序序中中被被无无意意修修改改的的机机会会,因因此此,如如果果有有更更好好的的处处理理变变量量的的方方法法,就就不不要要声声明明全全局局变变量量。另另外外,用用Const语语句句定定义义的符号常量也能声明为全局的。的符号常量也能声明为全局的。【例【例8-2】公有的模块级全局变量示例。】公有的模块级全局变量示例。Public a As Integer,b As Integer,c As Integer 写在“(通用)”的“(声明)”中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);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所所示示。从从程程序序的的运运行行结结果果可可以以看看出出,在在模模块块级级中中用用Public声声明明的的全全程程变变量量a、b、c,在在各各过过程中都能访问和修改。程中都能访问和修改。8.2.3 8.2.3 变量的生存期变量的生存期 从从变变量量的的作作用用空空间间来来说说,变变量量有有作作用用范范围围;从从变变量量的的作作用时间来说,变量有生存期。用时间来说,变量有生存期。假假设设过过程程内内部部有有一一个个变变量量,当当程程序序运运行行进进入入该该过过程程时时,要要分分配配给给该该变变量量一一定定的的内内存存单单元元,一一旦旦程程序序退退出出该该过过程程,变变量量占占有有的的内内存存单单元元是是释释放放还还是是保保留留,根根据据变变量量在在程程序序运运行行期期间间的的生生命命周周期期,把把变变量量分分为为静静态态变变量量(Static)和和动动态态变变量量(Dynamic)。静静态态变变量量不不释释放放内内存存单单元元,动动态态变变量量释释放放内内存存单单元元,有有时时候候可可能能需需要要某某些些局局部部变变量量是是静静态态变变量量,而其他变量则为动态变量。而其他变量则为动态变量。【例【例8-3】下面程序说明了】下面程序说明了Static关键字的作用。关键字的作用。Private Sub Form_Activate()Dim i As Integer 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变变量量,每每次次调调用用保保持持上上一一次次的的值值,y、n的的值值会会变变化化;x、m是是动动态态变变量量,每每次次调调用用都都被被重重新新初初始始化化为为0或或,它们的值总是不变。,它们的值总是不变。为为使使过过程程中中所所有有的的局局部部变变量量为为静静态态变变量量,可可在在过过程程头头的的起始处加上起始处加上Static关键字。例如:关键字。例如:Static Function RunningTotal(num)这这就就使使过过程程中中的的所所有有局局部部变变量量都都变变为为静静态态,无无论论它它们们是是用用Static、Dim或或Private声明的还是隐式声明的。声明的还是隐式声明的。v8.3 过程的作用范围过程的作用范围 过过程程也也有有作作用用的的范范围围(作作用用域域),在在VB中中,过过程程的的作作用用域分为模块级(或称文件级)和全局级(或称工程级)。域分为模块级(或称文件级)和全局级(或称工程级)。8.3.1 8.3.1 模块级过程模块级过程 模模块块级级过过程程是是在在某某个个模模块块(文文件件)内内定定义义的的过过程程。如如果果在在Sub或或Function前前加加关关键键字字Private,则则该该过过程程只只能能被被在在本本模模块块(文文件件)中中定定义义的的过过程程调调用用。即即其其作作用用域域为为本本模模块块(文件)。(文件)。8.3.2 8.3.2 全局级过程全局级过程 全全局局级级过过程程是是在在定定义义过过程程时时,在在Sub或或Function前前加加关关键键字字Public(可可以以默默认认)。全全局局级级过过程程可可被被整整个个应应用用程程序序所所有有模模块块(文文件件)中中定定义义的的过过程程调调用用。即即其其作作用用域域为为整整个个应应用程序(工程)。用程序(工程)。8.3.3 8.3.3 调用其他模块中的过程调用其他模块中的过程 在在工工程程中中的的任任何何地地方方都都能能调调用用其其他他模模块块中中的的全全局局过过程程。调调用用其其他他模模块块中中的的过过程程的的各各种种技技巧巧,取取决决于于该该过过程程是是在在窗窗体模块中、类模块中还是标准模块中。体模块中、类模块中还是标准模块中。(1)调用窗体中的过程调用窗体中的过程 所所有有窗窗体体模模块块的的外外部部调调用用必必须须指指向向包包含含此此过过程程的的窗窗体体模模块块。如如果果在在窗窗体体模模块块Form1中中包包含含SomeSub过过程程,则则可可使使用下面的语句调用用下面的语句调用Form1中的过程:中的过程:Call Form1.SomeSub(arguments)(2)调用类模块中的过程调用类模块中的过程 与与窗窗体体中中调调用用过过程程类类似似,在在类类模模块块中中调调用用过过程程要要调调用用与与过过程程一一致致并并且且指指向向类类实实例例的的变变量量。例例如如,DemoClass是是类类Class1的实例:的实例:Dim DemoClass as New Class1DemoClass.SomeSub 不不同同于于窗窗体体的的是是,在在引引用用一一个个类类的的实实例例时时,不不能能用用类类名名作作限限定定符符。必必须须首首先先声声明明类类的的实实例例为为对对象象变变量量(在在这这个个例例子中是子中是DemoClass),并用变量名引用它。),并用变量名引用它。(3)调用标准模块中的过程调用标准模块中的过程 如如果果过过程程名名是是唯唯一一的的,则则不不必必在在调调用用时时加加模模块块名名。无无论论是是在在模模块块内内,还还是是在在模模块块外外调调用用,结结果果总总会会引引用用这这个个唯唯一一过过程程。如如过过程程仅仅出出现现在在一一个个地地方方,这这个个过过程程就就是是唯唯一一的的。如如果果两两个个以以上上的的模模块块都都包包含含同同名名的的过过程程,那那就就有有必必要要用用模模块名来限定了。块名来限定了。例例如如,若若在在Module1中中调调用用Module2中中的的CommonName过程,要用下面的语句:过程,要用下面的语句:Module2.CommonName(arguments)【例【例8-4】全局级过程的调用,如图】全局级过程的调用,如图8-10所示。所示。应应用用程程序序(工工程程)中中包包括括两两个个窗窗体体Forml、Form2和和一一个个标标准准模模块块Module1。在在Forml窗窗体体中中定定义义了了一一个个计计算算矩矩形形面面积积的的全全局局级级Function过过程程,在在标标准准模模块块Module1中中定定义义了了一一个计算矩形周长的全局级个计算矩形周长的全局级Function过程。过程。两两个个窗窗体体中中的的命命令令按按钮钮组组的的Click事事件件过过程程功功能能相相同同,差差别是调用别是调用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)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()Form2.ShowEnd 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 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 用户定义类型用户定义类型8.4.1 8.4.1 用户定义类型的概念用户定义类型的概念 假设某校的学生成绩见表假设某校的学生成绩见表8-1。表表8-1 学生成绩表学生成绩表表表中中每每列列的的数数据据类类型型相相同同,都都是是前前面面介介绍绍过过的的基基本本数数据据类类型型,在在每每一一行行中中却却有有着着不不同同的的数数据据类类型型。虽虽然然使使用用VB的的Variant数数组组允允许许数数组组内内的的元元素素有有不不同同的的数数据据类类型型,但但却却比比较较浪浪费费内内存存。此此时时,VB允允许许将将基基本本数数据据类类型型按按需需要要组组合合起起来来,创创建建自自定定义义的的数数据据类类型型:用用户户定定义义类类型型(User Defined Type)。)。学 号姓 名性 别出生日期语 文数 学总 分99310李小华男1985年2月22日859518099103张红玉女1986年5月18日73.587160.599311樊利友男1984年9月21日8279161 用用户户定定义义类类型型又又被被称称为为“记记录录类类型型”,类类似似于于C语语言言中中的的“结结构构”。它它是是一一个个由由若若干干个个基基本本类类型型的的数数据据项项组组合合而而成成的的组组合合项项。如如表表8-1中中的的每每一一列列都都是是基基本本类类型型的的数数据据项项,分分别别描描述述同同一一对对象象(学学生生)的的不不同同属属性性,称称为为字字段段(或或称称为为数数据据项项),字字段段的的名名称称,如如学学号号、姓姓名名、性性别别、出出生生日日期期等等称称为为字字段段名名(或或称称数数据据项项名名)。表表中中的的记记录录类类型型就就是是由由这这7个个数数据据项项组组成成,其其中中每每个个学学生生的的7个个具具体体属属性性值值的的集集合合就就是是记记录录值值(简简称称记记录录),表表中中共共有有3个个记记录录值值,每每位位学学生生有有1个个记记录录。如如果果该该校校有有2000名名学学生生,则则该该校校学学生生成成绩绩数数据据文文件件中就应该有中就应该有2000个记录。个记录。8.4.2 8.4.2 创建用户定义类型创建用户定义类型 可可以以用用Type语语句句创创建建用用户户定定义义的的类类型型,该该语语句句必必须须置置于于模块的声明部分。其格式为:模块的声明部分。其格式为:Private|Public Type 用户类型名用户类型名 字段名字段名1 As 类型类型1 字段名字段名2 As 类型类型2 字段名字段名n As 类型类型nEnd Type 8.4.2 8.4.2 创建用户定义类型创建用户定义类型例例如如,要要建建立立一一个个学学生生成成绩绩处处理理程程序序,由由于于每每一一位位学学生生都都需需要要学学号号、姓姓名名、学学分分和和平平均均成成绩绩等等数数据据项项(字字段段),则则可以使用可以使用Type语句来定义一个名称为语句来定义一个名称为studentrec的记录。的记录。Private Type studentrec stunum As String*6 学号元素为学号元素为6个字符的定长字符串个字符的定长字符串 names As String*8 姓名元素为姓名元素为8个字符的定长字符串个字符的定长字符串 credit As Integer 学分元素为整型学分元素为整型 avg As Single 平均成绩为单精度型平均成绩为单精度型End Type8.4.3 8.4.3 建立和使用用户定义类型变量建立和使用用户定义类型变量 在在使使用用用用户户定定义义类类型型之之前前,必必须须用用Type语语句句创创建建数数据据类类型。型。1.建立用户定义类型变量建立用户定义类型变量 用用户户定定义义类类型型被被创创建建后后,可可以以用用Dim、Redim、Static建建立立一一个个具具有有这这种种数数据据类类型型的的变变量量。例例如如定定义义一一个个具具有有studentrec类型的变量stu:Dim stu AS studentrec 用用户户定定义义类类型型也也可可以以作作为为数数组组元元素素的的数数据据类类型型。例例如如,定义一个拥有定义一个拥有100个记录元素的数组个记录元素的数组student:Dim student(1 To 100)As studentrec2.使用用户定义类型变量使用用户定义类型变量 如如果果要要存存取取用用户户定定义义类类型型变变量量中中的的某某个个字字段段的的数数据据,其其格式如下。格式如下。用户数据类型变量名用户数据类型变量名.字段名字段名 例例如如,要要存存取取用用户户定定义义类类型型变变量量stu中中names这这个个字字段段的的数据,要写为:数据,要写为:stu.names。【例【例8-5】把数据值分别赋给】把数据值分别赋给stu变量中的各个字段。变量中的各个字段。首先在窗体模块的通用段创建用户定义类型:首先在窗体模块的通用段创建用户定义类型:Private Type studentrec stunum As String*6 学号元素为学号元素为6个字符的定长字符串个字符的定长字符串 names As String*8 姓名元素为姓名元素为8个字符的定长字符串个字符的定长字符串 credit As Integer 学分元素为整型学分元素为整型 avg As Single 平均成绩为单精度型平均成绩为单精度型End Type 编写命令按钮的编写命令按钮的Click事件代码:事件代码:Private Sub Command1_Click()Dim stu As studentrec 定义一个具有studentrec类型的变量stu stu.stunum=990001 stu.names=王 平 stu.credit=65 stu.avg=88 Text1(0).Text=stu.stunum Text1(1).Text=stu.names Text1(2).Text=stu.credit Text1(3).Text=stu.avgEnd Sub图图8-11 运行结果运行结果 程序运行结果如图程序运行结果如图8-11所示。所示。8.4.4 8.4.4 用户定义类型数组用户定义类型数组 如如果果一一个个数数组组中中元元素素的的数数据据类类型型是是用用户户定定义义类类型型,则则称称为为用用户户定定义义类类型型数数组组或或记记录录数数组组(Array of records)。存存取记录数组元素的某个字段数据的语法为:取记录数组元素的某个字段数据的语法为:记录数组元素记录数组元素.字段名字段名 例如,存取第例如,存取第1、第、第28位学生的平均分数,要写为位学生的平均分数,要写为student(1).avgstudent(28).avg8.4.4 8.4.4 用户定义类型数组用户定义类型数组【例例8-6】假假设设某某班班有有50位位学学生生,每每位位学学生生一一个个记记录录,定定义义一个包含一个包含50个元素的用户定义数组,并给第个元素的用户定义数组,并给第32位学生赋值。位学生赋值。首先在窗体模块的通用段创建用户定义类型:首先在窗体模块的通用段创建用户定义类型:Private Type studentrec stunum As String*6 names As String*8 credit As Integer avg As SingleEnd Type 编写命令按钮的编写命令按钮的Click事件代码:事件代码:Private Sub Command1_Click()Dim student(1 To 50)As studentrec 定义记录数组定义记录数组 student(32).stunum=960001 student(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-7】输输入入学学生生的的姓姓名名、学学号号、语语文文分分数数、英英语语分分数数、数数学学分分数数,计计算算每每名名学学生生的的个个人人平平均均成成绩绩,并并显显示示学学生生的的各科成绩,如图各科成绩,如图8-12所示。所示。首先在窗体的通用段创建用户定义类型并且声明变量:首先在窗体的通用段创建用户定义类型并且声明变量:Private Type studentRecord name As String*6 姓名变量定义为6个字符长度 studentNum As String*5 学号变量定义为5个字符长度 chinese As Single 语文变量定义为单精度数 english As Single 英语变量定义为单精度数 math As Single 数学变量定义为单精度数 average As Single 平均成绩定义为单精度数End TypeDim stu()As studentRecord 定义记录数组 编写窗体的编写窗体的Load事件代码:事件代码:Private Sub Form_Load()ReDim stu(0)End Sub编写编写“输入输入”按钮按钮Command1的的Click事件代码:事件代码:图图8-12 显示学生成绩显示学生成绩Private Sub Command1_Click()n=UBound(stu)ReDim stu(n+1)With stu(n+1).studentNum=Text1(0).Text .name=Text1(1).Text .chinese=Text1(2).Text .english=Text1(3).Text .math=Text1(4).Text .average=Int(.chinese+.english+.math)/3*100)/100 cc=Format(.chinese,)&Format(.english,)&_ Format(.math,)&Format(Str(.average),)List1.AddItem Format(RTrim(.studentNum),)&_ Format(RTrim(.name),)&cc End With Text1(0).SetFocusEnd Sub 编写编写“删除删除”按钮按钮Command2的的Click事件代码:事件代码:Private Sub Command2_Click()If List1.ListIndex=1 Then MsgBox 请选定欲删除的项!Exit Sub End If n=List1.ListIndex+1 For i=n To UBound(stu)1 stu(i)=stu(i+1)Next List1.RemoveItem n-1 Text1(0).Text=stu(1).studentNum Text1(1).Text=stu(1).name Text1(2).Text=stu(1).chinese Text1(3).Text=stu(1).english Text1(4).Text=stu(1).mathEnd Sub 编写列表框编写列表框List1的的Click事件代码:事件代码:Private Sub List1_Click()n=List1.ListIndex+1 Text1(0).Text=stu(n).studentNum Text1(1).Text=stu(n).name Text1(2).Text=stu(n).chinese Text1(3).Text=stu(n).english Text1(4).Text=stu(n).mathEnd Sub 另外编写文本框组的事件代码,使之方便输入:另外编写文本框组的事件代码,使之方便输入:Private Sub Text1_GotFocus(Index As Integer)Text1(Index).SelStart=0 Text1(Index).SelLength=Len(Text1(Index).Text)End SubPrivate Sub Text1_KeyPress(Index As Integer,KeyAscii As Integer)If KeyAscii=13 Then i=IIf(Index=4,0,Index+1)Text1(i).SetFocus End IfEnd Sub
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:vb变量与过程的作用范围.ppt
    链接地址:https://www.zixin.com.cn/doc/3255449.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork