《过程和变量的作用域课件.ppt》由会员分享,可在线阅读,更多相关《过程和变量的作用域课件.ppt(31页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、过程和变量的作用域过程和变量的作用域第1页,此课件共31页哦在在第二章第二章我们介绍了我们介绍了VBVB应用程序(通常称为工程)的组织结构,应用程序(通常称为工程)的组织结构,它由它由窗体模块、标准模块和类模块窗体模块、标准模块和类模块组成。组成。VBVB程序代码就保存在窗体模程序代码就保存在窗体模块文件(块文件(.Frm.Frm)、标准模块文件()、标准模块文件(.Bas.Bas)或类模块文件()或类模块文件(.Cls.Cls)中。它们形成了工程的一种模块层次结构,如下图所示。中。它们形成了工程的一种模块层次结构,如下图所示。7.1概概述述第2页,此课件共31页哦7.1.1窗体模块窗体模块(
2、文件扩展名为文件扩展名为.FRM)窗窗体体模模块块。窗窗体体模模块块可可以以包包含含处处理理事事件件的的过过程程、通通用用过过程程以以及及变变量量、常常数数、类类型型和和外外部部过过程程的的窗窗体体级级声声明明。如如果果要要在在文文本本编编辑辑器器中中观观察察窗窗体体模模块块,则则还还会会看看到到窗窗体体及及其其控控件件的的描描述述,包包括括它它们们的的属属性性设设置置值值。写写入入窗窗体体模模块块的的代代码码是是该该窗窗体体所所属属的的具具体体应应用用程程序序专专用用的的;它它也也可可以以引引用用该该应应用用程程序序内内的其它窗体或对象。的其它窗体或对象。7.1概概述述第3页,此课件共31页
3、哦7.1.2标准模块标准模块(文件扩展名为文件扩展名为BAS)它它们们可可以以包包含含变变量量、常常数数、类类型型、外外部部过过程程和和全全局局过过程程的的全全局局(在在整整个个应应用用程程序序范范围围内内有有效效的的)声声明明或或模模块块级级声声明明。写写入入标标准准模模块块的的代代码码不不必必绑绑在在特特定定的的应应用用程程序序上上,则在许多不同的应用程序中可以重用标准模块。则在许多不同的应用程序中可以重用标准模块。7.1概概述述第4页,此课件共31页哦7.1.3类模块类模块(文件扩展名为文件扩展名为.CLS)在在VisualBasic中中类类模模块块是是面面向向对对象象编编程程的的基基础
4、础。可可在在类类模模块块中中编编写写代代码码建建立立新新对对象象。这这些些新新对对象象可可以以包包含含自自定定义义的的属属性性和和方方法法。实实际际上上,窗窗体体正正是是这这样样一一种种类类模模块,在其上可安放控件,可显示窗体窗口。块,在其上可安放控件,可显示窗体窗口。7.1概概述述第5页,此课件共31页哦7.2过程的作用域过程的作用域Public|Private Sub 子过程名子过程名(形式参数列表形式参数列表).EndSub概念概念通通用用子子过过程程和和函函数数过过程程既既可可写写在在窗窗体体模模块块中中也也可可写写在在标标准准模模块块中中,在在定定义义时时可可选选用用关关键键字字Pr
5、ivatePrivate(局局部部)和和PublicPublic(全局)(全局),来决定它们能被调用的范围。,来决定它们能被调用的范围。第6页,此课件共31页哦1、窗体窗体/模块级过程:模块级过程:加加Private关键字的过程,只能被定义的窗体或模关键字的过程,只能被定义的窗体或模块中的过程块中的过程调用。调用。2、全局级过程:全局级过程:加加Public关键字关键字(或缺省)(或缺省)的过程,可供该应用程序的所有窗的过程,可供该应用程序的所有窗体和所有标准模块中的过程调用。体和所有标准模块中的过程调用。按过程的作用范围来划分,过程可分为:按过程的作用范围来划分,过程可分为:模块级过程模块级
6、过程全局级过程全局级过程用例用例7.1来说明过程的作用域来说明过程的作用域7.2过程的作用域过程的作用域第7页,此课件共31页哦总结归纳过程的定义及作用域如下表(教材总结归纳过程的定义及作用域如下表(教材Pg.163)几点说明:(教材几点说明:(教材Pg.164)7.2过程的作用域过程的作用域第8页,此课件共31页哦7.3变量的作用域变量的作用域概述:概述:在在VB中中,由由于于可可以以在在过过程程中中和和模模块块中中声声明明变变量量,根根据据定定义义变变量量的的位位置置和和定定义义变变量量的的语语句句不不同同,变变量量可可以以分分为:为:局部变量局部变量(过程级变量)(过程级变量)窗窗体体/
7、模模块块级级变变量量(私私有有的的模模块块级级变变量量,能能被被本本模模块块的的所所有过程和函数使用)有过程和函数使用)全局级变量全局级变量(公有的模块级变量)。(公有的模块级变量)。第9页,此课件共31页哦7.3.1过程级变量过程级变量局部变量局部变量局部变量:局部变量:在过程内用声明的变量,只能在本过在过程内用声明的变量,只能在本过程中使用。程中使用。在过程内部使用在过程内部使用Dim或者或者Static关键字来声明的变量,关键字来声明的变量,只在声明它们的过程中才能被访问或改变该变量的值,别只在声明它们的过程中才能被访问或改变该变量的值,别的过程不可访问。所以可以在不同的过程中声明相同名
8、字的过程不可访问。所以可以在不同的过程中声明相同名字的局部变量而互不影响。的局部变量而互不影响。7.3变量的作用域变量的作用域第10页,此课件共31页哦例:例:PrivateSubForm_Load()Dimn%n=10EndSubPrivateSubFrom_Click()Dimn%Print“n=“;nEndSub程序运行后单击窗体,其输出结果是什么?程序运行后单击窗体,其输出结果是什么?7.3变量的作用域变量的作用域第11页,此课件共31页哦7.3.2窗体窗体/模块级变量模块级变量窗窗体体/模模块块级级变变量量:在在“通通用用声声明明”段段中中用用Dim语语句句或或用用Private语语
9、句句声声明明的的变变量量,可可被被本本窗窗体体/模模块块的的任任何何过过程程访问。但其他模块却不能访问该变量。访问。但其他模块却不能访问该变量。例例如如:在在“通通用用声声明明”段段声声明明如如下下变变量量:PrivatesAsStringDimaAsInteger7.3变量的作用域变量的作用域例:例:Dimn%PrivateSubForm_Load()n=10EndSubPrivateSubFrom_Click()Print“n=“;nEndSub第12页,此课件共31页哦7.3.3全局变量全局变量全全局局变变量量也也称称公公有有的的模模块块级级变变量量,在在窗窗体体模模块块或或标标准准模模
10、块块的的顶顶部部的的“通通用用”声声明明段段用用Public关关键键字字声声明明,它它的的作作用用范范围围是是整整个个应应用用程程序序,即即可可被被本本应应用用程程序的任何过程或函数访问。序的任何过程或函数访问。例如:例如:PublicaAsInteger,bAssingle7.3变量的作用域变量的作用域第13页,此课件共31页哦3种变量声明及使用规则如下表:种变量声明及使用规则如下表:7.3变量的作用域变量的作用域第14页,此课件共31页哦一、公用变量与局部变量同名一、公用变量与局部变量同名在不同过程中定义同名变量,它们互不影响,但若在一过程中在不同过程中定义同名变量,它们互不影响,但若在一
11、过程中定义使用了与全局变量同名的变量,则就应注意。定义使用了与全局变量同名的变量,则就应注意。7.3.4 7.3.4 关于多个变量同名关于多个变量同名注意:注意:在过程中,如果定义了与模块级变量(在通用部分使用在过程中,如果定义了与模块级变量(在通用部分使用Private或或Dim声明的变量),则在该过程内不能引用同名的模块级变声明的变量),则在该过程内不能引用同名的模块级变量。量。例如例如:7.3变量的作用域变量的作用域第15页,此课件共31页哦Public Temp As Integer 定义全局变量定义全局变量Private Sub Form_Load()Temp=1 将全局变量将全局变
12、量Temp 的值设置成的值设置成 1End SubPrivate Sub Command1_Click()Dim Temp As Integer 定义局部变量定义局部变量Temp=2 将局部变量将局部变量Temp 的值设置成的值设置成 2 Print temp=;Temp Print temp=;Form1.TempEnd SubPrivate Sub Command2_Click()Print temp=;Temp End Sub7.3变量的作用域变量的作用域第16页,此课件共31页哦二、全局变量同名二、全局变量同名 如如果果不不同同模模块块中中的的全全局局变变量量使使用用同同一一名名字字,
13、则则通通过过同同时时引引用模块名和变量名就可以在代码中区分它们。用模块名和变量名就可以在代码中区分它们。例例如如,如如果果有有一一个个在在 Form1 和和 Module1 中中都都声声明明了了公公 用用 的的 Integer 变变 量量 intX,则则 把把 它它 们们 作作 为为 Module1.intX 和和Form1.intX 来来引引用用便便得得到到正正确确值值。也也就就是是说说如如果果不不同同模模块块中中的的全全局局变变量量使使用用同同一一名名字字,引引用用时时就就需需要使用要使用“模块名模块名.变量名变量名”的形式来区分它们。的形式来区分它们。7.3变量的作用域变量的作用域第17
14、页,此课件共31页哦7.3.5静态变量静态变量除作用域之外,变量还有存活期,在这一期间变量能够保除作用域之外,变量还有存活期,在这一期间变量能够保持它们的值。持它们的值。在应用程序的存活期内一直保持在应用程序的存活期内一直保持模块级变量模块级变量和和全局变量全局变量的值。的值。但是,对于但是,对于Dim声明的局部变量声明的局部变量仅当过程执行期间存在,当一个过仅当过程执行期间存在,当一个过程执行完毕,它的局部变量的值就已经不存在,而且程执行完毕,它的局部变量的值就已经不存在,而且变量所占据的内变量所占据的内存也被释放存也被释放。当下一次执行该过程时,它的所有局部变量将重新初始。当下一次执行该过
15、程时,它的所有局部变量将重新初始化。化。概念概念局部变量的存活期由其定义的关键词来决定。局部变量的存活期由其定义的关键词来决定。7.3变量的作用域变量的作用域第18页,此课件共31页哦局部变量声明:局部变量声明:Dim声明:声明:随过程的调用而分配存贮单元,变量的初始化;过程随过程的调用而分配存贮单元,变量的初始化;过程体结束,变量的内容自动消失,存贮单元释放。体结束,变量的内容自动消失,存贮单元释放。Static声明声明,每次调用过程,变量保持上次调用结束时的值。,每次调用过程,变量保持上次调用结束时的值。声明形式:声明形式:Static变量名变量名AS类型类型StaticFunction函
16、数过程名函数过程名(参数列表参数列表)As类型类型StaticSub子过程名子过程名(参数列表参数列表)注意:过程名前加注意:过程名前加Static,表示该过程内的局部变,表示该过程内的局部变量都是静态变量。量都是静态变量。7.3变量的作用域变量的作用域第19页,此课件共31页哦例例7.2 有有一一个个人人编编了了下下面面一一段段程程序序,想想用用变变量量n记记录录单单击击窗窗体体的的次次数。数。Private Sub Form_Click()Dim n As Integer n=n+1 Print 已单击次数:已单击次数:;n&次次End Sub分析程序运行后多次单击窗体的输出结果:分析程序
17、运行后多次单击窗体的输出结果:要记录单击窗体次数,如何实现?并比较使用模块变量和静要记录单击窗体次数,如何实现?并比较使用模块变量和静态变量的差别。态变量的差别。例例7.3教材教材P1687.3变量的作用域变量的作用域第20页,此课件共31页哦PrivateSubForm_Click()Dimi%,isum%Fori=1To5isum=sum(i)Printisum,NextiEndSubPrivateFunctionsum(nAsInteger)DimjAsIntegerj=j+nsum=jEndFunction12345StaticjAsInteger结果如何?结果如何?补充例题:补充例题
18、:7.3变量的作用域变量的作用域第21页,此课件共31页哦7.4多重窗体与多模块程序设计多重窗体与多模块程序设计一一个个稍稍微微复复杂杂的的应应用用程程序序,不不仅仅有有多多个个窗窗体体,还还可可能能有有标标准准模模块块和和类类模块,如下图所示。模块,如下图所示。本节介绍在多模块程序中,本节介绍在多模块程序中,关于启动对象的设置、窗体的加关于启动对象的设置、窗体的加载与卸载、窗体的加载与卸载时载与卸载、窗体的加载与卸载时的事件、多模块间数据的传递等。的事件、多模块间数据的传递等。第22页,此课件共31页哦7.4.1设置启动对象设置启动对象在在程程序序运运行行时时,首首先先被被加加载载并并执执行
19、行的的对对象象,称称为为程程序序的的启启动动对对象象。一一个个程程序序的的启启动动对对象象可可以以是是一一个个窗窗体体,也也可可以以是是标标准准模模块块中中名名为为Main的的自自定定义义Sub过过程程。缺缺省省情情况况下下,第第一一个个创创建建的的窗窗体体被被指指定为启动对象。定为启动对象。1、设置方法:、设置方法:从从“工程工程”菜单中的最后一项菜单中的最后一项“*属性属性”,在,在“*工程属工程属性性”对话框中进行设置。对话框中进行设置。2、如果设置从主过程、如果设置从主过程Main()启动,则必须在标准模块中编写启动,则必须在标准模块中编写Main()过程代码。过程代码。例:例:Pg1
20、70.7.4多重窗体与多模块程序设计多重窗体与多模块程序设计第23页,此课件共31页哦7.4.2窗体的加载与卸载过程窗体的加载与卸载过程当一个窗体要显示在屏幕之前,必须先建立,接着被当一个窗体要显示在屏幕之前,必须先建立,接着被装入内存(装入内存(Load语句语句),最后显示(),最后显示(Show方法方法)在屏幕)在屏幕上。同样,当窗体要结束之前,会先从屏幕上隐藏上。同样,当窗体要结束之前,会先从屏幕上隐藏(Hide方法方法),接着从内存中删除(),接着从内存中删除(Unload方法方法)7.4多重窗体与多模块程序设计多重窗体与多模块程序设计第24页,此课件共31页哦在窗体的加载过程的各阶段
21、所用一的语句或方法以及所触发在窗体的加载过程的各阶段所用一的语句或方法以及所触发的事件可用下面的图来说明:的事件可用下面的图来说明:7.4多重窗体与多模块程序设计多重窗体与多模块程序设计第25页,此课件共31页哦在窗体的卸载过程的各阶段所用一的语句或方法以及所触在窗体的卸载过程的各阶段所用一的语句或方法以及所触发的事件如下图:发的事件如下图:Unload 语句QueryUnloadUnload7.4多重窗体与多模块程序设计多重窗体与多模块程序设计第26页,此课件共31页哦1、窗体的加载与显示、窗体的加载与显示(1)Load语句:装入窗体到内存语句:装入窗体到内存Load窗体名称窗体名称说明:执
22、行说明:执行Load语句后,窗体并不显示出来,但可引用该语句后,窗体并不显示出来,但可引用该窗体中的控件及各种属性。窗体中的控件及各种属性。注意:这里的窗体名称是窗体的注意:这里的窗体名称是窗体的Name属性,属性,而不是窗体的文件名,以下相同。而不是窗体的文件名,以下相同。(3)Show方法:显示一个窗体方法:显示一个窗体窗体名称窗体名称.Show模式模式0Modeless(非模式):可以对其它窗体进行操作(非模式):可以对其它窗体进行操作1Model,关闭才能对其它窗体进行操作。,关闭才能对其它窗体进行操作。7.4多重窗体与多模块程序设计多重窗体与多模块程序设计第27页,此课件共31页哦2
23、、窗体的隐藏与卸载窗体的隐藏与卸载(1)Unload语句:从内存删除窗体语句:从内存删除窗体Unload说明:说明:当当窗窗体体卸卸载载之之后后,所所有有在在运运行行时时放放到到该该窗窗体体上上的的控控件件都都不不再再是是可访问的。在设计时放到该窗体上的控件将保持不变可访问的。在设计时放到该窗体上的控件将保持不变在在卸卸载载窗窗体体时时,只只有有显显示示的的部部件件被被卸卸载载。与与该该窗窗体体模模块块相相关关联联的代码还保持在内存中。的代码还保持在内存中。(2)Hide方法:隐藏,没有删除方法:隐藏,没有删除窗体名称窗体名称.Hide7.4多重窗体与多模块程序设计多重窗体与多模块程序设计第2
24、8页,此课件共31页哦7.4.3与窗体加载与卸载过程的关的事件与窗体加载与卸载过程的关的事件1Initialize事件事件2Load事件事件3Paint事件事件4QueryUnLoad事件事件5UnLoad事件事件6Activate事件与事件与Deactivate事件事件7Terminate事件事件例例7.4验证与窗体加载与卸载过程相关的事件被触发的先后顺序。验证与窗体加载与卸载过程相关的事件被触发的先后顺序。7.4多重窗体与多模块程序设计多重窗体与多模块程序设计第29页,此课件共31页哦7.4.4应用举例应用举例例例7.5设设计计一一个个程程序序界界面面如如图图7-13和和图图7-14所所示
25、示,有有两两个个窗窗体体的的应应用用程程序序。用用户户在在Form窗窗体体(输输入入窗窗体体)的的“请请输输入入排排序序数数个个 数数”文文 本本 框框 输输 入入 有有 效效 数数,按按 回回 车车 键键 后后,在在 该该 窗窗 体体 的的“Picture1”图图片片框框中中输输出出排排序序前前的的数数,单单击击“排排序序”按按钮钮,启启动动Form2窗窗体体,调调用用冒冒泡泡排排序序子子过过程程Sort并并把把排排序序结结果果在在Form2(输输出出结结果果)窗窗体体的的“Picture1”图图片片框框中中输输出出,在在Form2(输输出出结结果果)窗窗体体的的“请请输输入入要要查查找找的的数数”文文本本框框内内输输入入要要查查找找的的数数后后,单单击击“查查找找”按按钮钮,调调用用上上一一章章的的例例6.12查查找找函函数数过过程程(Search),查查找找结结果果在在“查查找找结结果果”文文本本框框显显示示,单单击击“结结束束”按按钮钮结结束束应应用用程程序序的的运行。运行。7.4多重窗体与多模块程序设计多重窗体与多模块程序设计第30页,此课件共31页哦二、判断题二、判断题三、选择题三、选择题四、程序阅读四、程序阅读本章作业本章作业第31页,此课件共31页哦
限制150内