第7章过程和变量的作用域_第1页
第7章过程和变量的作用域_第2页
第7章过程和变量的作用域_第3页
第7章过程和变量的作用域_第4页
第7章过程和变量的作用域_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、 在在第二章第二章我们介绍了我们介绍了VBVB应用程序(通常称为应用程序(通常称为工程)的组织结构,它由工程)的组织结构,它由窗体模块、标准模块和类窗体模块、标准模块和类模块模块组成。组成。VBVB程序代码就保存在窗体模块文件程序代码就保存在窗体模块文件(. .FrmFrm)、标准模块文件()、标准模块文件(. .BasBas)或类模块文)或类模块文件(件(. .ClsCls)中。它们形成了工程的一种模块层次)中。它们形成了工程的一种模块层次结构,如下图所示。结构,如下图所示。第七章第七章 过程和变量的作用域过程和变量的作用域 7.1 概 述一个应用程序的组成结构7.1.1 窗体模块窗体模块(

2、文件扩展名为文件扩展名为 .FRM ) 窗体模块。窗体模块可以包含处理事件的过窗体模块。窗体模块可以包含处理事件的过程、通用过程以及变量、常数、类型和外部过程程、通用过程以及变量、常数、类型和外部过程的窗体级声明。如果要在文本编辑器中观察窗体的窗体级声明。如果要在文本编辑器中观察窗体模块,则还会看到窗体及其控件的描述,包括它模块,则还会看到窗体及其控件的描述,包括它们的属性设置值。写入窗体模块的代码是该窗体们的属性设置值。写入窗体模块的代码是该窗体所属的具体应用程序专用的;它也可以引用该应所属的具体应用程序专用的;它也可以引用该应用程序内的其它窗体或对象。用程序内的其它窗体或对象。7.1.2

3、标准模块标准模块(文件扩展名为文件扩展名为BAS) 它们可以包含变量、常数、类型、外部过程它们可以包含变量、常数、类型、外部过程和全局过程的全局和全局过程的全局(在整个应用程序范围内有效的在整个应用程序范围内有效的)声明或模块级声明。写入标准模块的代码不必绑声明或模块级声明。写入标准模块的代码不必绑在特定的应用程序上,则在许多不同的应用程序在特定的应用程序上,则在许多不同的应用程序中可以重用标准模块。中可以重用标准模块。7.1.3 类模块类模块(文件扩展名为文件扩展名为 .CLS) 在在 Visual Basic 中类模块是面向对象编程的基中类模块是面向对象编程的基础。可在类模块中编写代码建立

4、新对象。这些新础。可在类模块中编写代码建立新对象。这些新对象可以包含自定义的属性和方法。实际上,窗对象可以包含自定义的属性和方法。实际上,窗体正是这样一种类模块,在其上可安放控件,可体正是这样一种类模块,在其上可安放控件,可显示窗体窗口。显示窗体窗口。7.2 过程的作用域过程的作用域Public|Private Sub 子过程名子过程名(形式参数列表形式参数列表) . End Sub概念概念 通用子过程和函数过程既可写在通用子过程和函数过程既可写在窗体模块中窗体模块中也可写在也可写在标准模块中标准模块中,在定义时可选用关键字,在定义时可选用关键字PrivatePrivate(局部)(局部)和和

5、PublicPublic(全局)(全局),来决定它们能被调用的范围。,来决定它们能被调用的范围。 1、窗体窗体/模块级过程:模块级过程: 加加Private关键字的过程,只能被定义的窗体或模关键字的过程,只能被定义的窗体或模 块中块中的过程调用。的过程调用。2、全局级过程:全局级过程: 加加Public关键字关键字(或缺省)(或缺省)的过程,可供该应用程序的过程,可供该应用程序的所有窗体和所有标准模块中的过程调用。的所有窗体和所有标准模块中的过程调用。按过程的作用范围来划分,过程可分为:按过程的作用范围来划分,过程可分为: 模块级过程模块级过程 全局级过程全局级过程用例7.1来说明过程的作用域

6、 总结归纳过程的定义及作用域如下表(教材总结归纳过程的定义及作用域如下表(教材Pg.163)几点说明:(教材Pg.164)7.3 变量的作用域概述:概述: 在VB中,由于可以在过程中和模块中声明变量,根据定义变量的位置和定义变量的语句不同,变量可以分为:局部变量(过程级变量)窗体/模块级变量(私有的模块级变量,能被本模块的所有过程和函数使用)全局级变量(公有的模块级变量)。7.3.1 过程级变量过程级变量局部变量局部变量局部变量:局部变量:在过程内用声明的变量,只能在本过在过程内用声明的变量,只能在本过程中使用。程中使用。 在过程内部使用在过程内部使用 Dim 或者或者 Static 关键字来

7、关键字来声明的变量,只在声明它们的过程中才能被访问声明的变量,只在声明它们的过程中才能被访问或改变该变量的值,别的过程不可访问。所以可或改变该变量的值,别的过程不可访问。所以可以在不同的过程中声明相同名字的局部变量而互以在不同的过程中声明相同名字的局部变量而互不影响。不影响。 例:例:Private Sub Form_Load()Dim n%n= 10End SubPrivate Sub From_Click()Dim n%Print “n=“;nEnd Sub程序运行后单击窗体,其输出结果是什么?程序运行后单击窗体,其输出结果是什么?7.3.2 窗体窗体/模块级变量模块级变量 窗体窗体/模块

8、级变量:模块级变量:在在“ “通用声明通用声明” ”段中用段中用Dim语句或用语句或用Private语句声明的变量,可被本窗体语句声明的变量,可被本窗体/模块的任何过程访模块的任何过程访问。但其他模块却不能访问该变量。问。但其他模块却不能访问该变量。例如:在例如:在“ “通用声明通用声明” ”段声明如下变量段声明如下变量Private s As String Dim a As Integer,b As Single 7.3.3 全局变量全局变量 全局变量也称公有的模块级变量,在窗体模块或标准模块的顶部的“通用”声明段用Public关键字声明,它的作用范围是整个应用程序,即可被本应用程序的任何过

9、程或函数访问。例如: Public a As Integer,b As single3种变量声明及使用规则如下表:种变量声明及使用规则如下表:一、公用变量与局部变量同名一、公用变量与局部变量同名 在不同过程中定义同名变量,它们互不影响,但若在一在不同过程中定义同名变量,它们互不影响,但若在一过程中定义使用了与全局变量同名的变量,则就应注意。过程中定义使用了与全局变量同名的变量,则就应注意。 7.3.4 关于多个变量同名关于多个变量同名 注意:在过程中,如果定义了与模块级变量(在通注意:在过程中,如果定义了与模块级变量(在通用部分使用用部分使用Private或或Dim声明的变量),则在该过程内声

10、明的变量),则在该过程内不能引用同名的模块级变量。例如,上面的例子中,如不能引用同名的模块级变量。例如,上面的例子中,如果将定义全局变量的语句果将定义全局变量的语句Public Temp As Integer改为改为Private Temp As Integer 则在则在Command1的单击事件中就的单击事件中就不使用模块级的不使用模块级的Temp变量。变量。 Public Temp As Integer 定义全局变量定义全局变量Private Sub Form_Load()Temp = 1 将全局变量将全局变量Temp 的值设置成的值设置成 1End SubPrivate Sub Comm

11、and1_Click()Dim Temp As Integer 定义局部变量定义局部变量Temp = 2 将局部变量将局部变量Temp 的值设置成的值设置成 2 Print temp=; Temp Print temp=; Form1.TempEnd SubPrivate Sub Command2_Click() Print temp=; Temp End Sub二、全局变量同名二、全局变量同名 如果不同模块中的全局变量使用同一名字,则通过如果不同模块中的全局变量使用同一名字,则通过同时引用模块名和变量名就可以在代码中区分它们。同时引用模块名和变量名就可以在代码中区分它们。例如,如果有一个在例

12、如,如果有一个在 Form1 和和 Module1 中都声中都声明了公用的明了公用的 Integer 变量变量 intX,则把它们作为,则把它们作为 MX 和和FX 来引用便得到正来引用便得到正确值。也就是说确值。也就是说如果不同模块中的全局变量使用同一如果不同模块中的全局变量使用同一名字,引用时就需要使用名字,引用时就需要使用“模块名模块名.变量名变量名”的形式的形式来区分它们。来区分它们。7.3.5 静态变量静态变量 除作用域之外,变量还有存活期,在这一期间变量能除作用域之外,变量还有存活期,在这一期间变量能够保持它们的值。够保持它们的值。 在应用程序的

13、存活期内一直保持在应用程序的存活期内一直保持模块级变量模块级变量和和全局变全局变量量的值。但是,对于的值。但是,对于Dim声明的局部变量声明的局部变量仅当过程执行期仅当过程执行期间存在,当一个过程执行完毕,它的局部变量的值就已经间存在,当一个过程执行完毕,它的局部变量的值就已经不存在,而且不存在,而且变量所占据的内存也被释放变量所占据的内存也被释放。当下一次执行。当下一次执行该过程时,它的所有局部变量将重新初始化。该过程时,它的所有局部变量将重新初始化。 概念概念局部变量的存活期由其定义的关键词来决定。局部变量的存活期由其定义的关键词来决定。局部变量声明:局部变量声明: Dim声明:声明:随过

14、程的调用而分配存贮单元,变量的初随过程的调用而分配存贮单元,变量的初始化;过程体结束,变量的内容自动消失,存贮单元释放。始化;过程体结束,变量的内容自动消失,存贮单元释放。 Static声明声明,每次调用过程,变量保持上次调用结束时,每次调用过程,变量保持上次调用结束时的值。的值。 声明形式:声明形式: Static 变量名变量名 AS 类型类型Static Function 函数过程名函数过程名(参数列表参数列表) As 类型类型 Static Sub 子过程名子过程名(参数列表参数列表) 注意:过程名前加注意:过程名前加Static,表示该过程内,表示该过程内的局部变量都是静态变量。的局部

15、变量都是静态变量。例例7.2 有一个人编了下面一段程序,想用变量n记录单击窗体的次数。Private Sub Form_Click() Dim n As Integer n = n + 1 Print 已单击次数:; n & 次End Sub分析程序运行后多次单击窗体的输出结果: 要记录单击窗体次数,如何实现?并比较使用模块要记录单击窗体次数,如何实现?并比较使用模块变量和静态变量的差别。变量和静态变量的差别。例7.3 教材P168Private Sub Form_Click() Dim i% ,isum% For i = 1 To 5isum = sum(i)Print isum, Next

16、 i End Sub Private Function sum(n As Integer) Dim j As Integer j = j + n sum = jEnd Function1 2 3 4 5Static j As Integer 结果如何?结果如何? 补充例题:补充例题:7.4 多重窗体与多模块程序设计 一个稍微复杂的应用程序,不仅有多个窗体,还可能一个稍微复杂的应用程序,不仅有多个窗体,还可能有标准模块和类模块,如下图所示。有标准模块和类模块,如下图所示。 本节介绍在多模块程序本节介绍在多模块程序中,关于启动对象的设置、中,关于启动对象的设置、窗体的加载与卸载、窗体窗体的加载与卸

17、载、窗体的加载与卸载时的事件、的加载与卸载时的事件、多模块间数据的传递等。多模块间数据的传递等。7.4.1 设置启动对象设置启动对象 在程序运行时,首先被加载并执行的对象,称为程序的在程序运行时,首先被加载并执行的对象,称为程序的启动对象启动对象。一个程序的启动对象可以是。一个程序的启动对象可以是一个窗体一个窗体,也可以,也可以是标准模块中名为是标准模块中名为Main的自定义的自定义Sub过程过程。缺省情况下,。缺省情况下,第一个创建的窗体被指定为启动对象。第一个创建的窗体被指定为启动对象。1、设置方法: 从“工程”菜单中的最后一项“*属性” ,在“*工程属性”对话框中进行设置。 2、如果设置

18、从主过程Main()启动,则必须在标准模块中编写Main()过程代码。例:Pg 窗体的加载与卸载过程窗体的加载与卸载过程 当一个窗体要显示在屏幕之前,必须先建立,当一个窗体要显示在屏幕之前,必须先建立,接着被装入内存(接着被装入内存(Load语句语句),最后显示(),最后显示(Show方法方法)在屏幕上。同样,当窗体要结束之前,会)在屏幕上。同样,当窗体要结束之前,会先从屏幕上隐藏(先从屏幕上隐藏(Hide方法方法),接着从内存中删),接着从内存中删除(除(Unload方法方法) 在窗体的加载过程的各阶段所用一的语句或方法以在窗体的加载过程的各阶段所用一的语句或方法以及所触发的事件可用下面的图来说明:及所触发的事件可用下面的图来说明: 在窗体的卸载过程的各阶段所用一的语句或方法以及在窗体的卸载过程的各阶段所用一的语句或方法以及所触发的事件如下图:所触发的事件如下图: Unload 语句QueryUnloadUnload1、窗体的加载与显示、窗体的加载与显

温馨提示

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

评论

0/150

提交评论