vb变量与过程的作用范围ppt课件_第1页
vb变量与过程的作用范围ppt课件_第2页
vb变量与过程的作用范围ppt课件_第3页
vb变量与过程的作用范围ppt课件_第4页
vb变量与过程的作用范围ppt课件_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

.第8章变量和进程的角色范围,第8章变量和进程的角色范围,VB中的应用程序由多个进程组成,这些进程通常存储在表单文件(.frm )或标准模块文件(.bas )中。 变量在过程中是不可或缺的。 可访问的范围取决于变量和进程的位置。 变量和进程可访问的范围称为变量和进程的范围。 8.1代码模块的概念在构建VB应用程序时,必须首先设计代码的结构。 VB应用程序的结构通常类似于图8-1。 图8-1VB应用的结构,VB将代码存储在三种不同的模块中:窗体模块(窗体)、标准模块(模块)和类模块。 这三个模块可以包含声明(声明常量、变量和动态链接库DLL )和过程(Sub、Function和Property过程)。 它们形成了工程的一个模块层次结构,既能很好地组织工程,又易于维护代码。 图8-2项目模块,8.1.1表单模块中的每个表单对应于表单模块,表单模块包括表单及其控件属性设置、表单变量说明、事件过程、表单中的公共进程和外部进程的表单级声明窗体模块保存在扩展名为. frm的文件中。 默认情况下,应用程序只有一个表单,因此,它具有一个带. frm扩展名的表单模块文件。 如果应用程序具有多个窗体,则有多个窗体模块扩展名为. frm。 在文本编辑器中查看窗体模块时,还会显示窗体及其控件的说明,如图8-3所示。 表单模块还可以引用应用程序中的其他表单或对象。 您可以从“项目”菜单中运行“添加表单”命令来添加新的表单模块。 8.1.2标准模块标准模块存储在扩展名为. bas的文件中,默认情况下,标准模块不包含在应用程序中。 标准模块可以包括公共或模块级变量、常量、类型、外部过程和全局过程的全局声明或模块级声明。 默认情况下,标准模块代码是公开的,表单和模块事件过程和常规过程可以调用它们。 写入标准模块的代码不必绑定到特定的应用程序,而是可以在许多不同的应用程序中重复使用标准模块。 标准模块可以存储常规过程,但不能存储事件过程。 您可以从“项目”菜单中运行“添加模块”命令,将标准模块添加到项目中。 另外,在8.1.3类模块VB中,类模块(文件扩展名. cls )是面向对象编程的基础。 程序员可以在类模块中编写代码,以创建包含可用于应用程序中进程的自定义属性和方法的新对象。 事实上,窗体本身是一个可以放置控件和显示窗体窗口的模块。 类模块与标准模块的区别在于,标准模块仅包含代码,而类模块包含代码和数据,从而可以将类模块视为物理上未表示的对象。 8.2变量的作用范围变量的作用范围(作用区域)是指变量在某个过程中能够识别的范围。 如果一个应用程序具有多个过程或函数,则可以在每个子例程中定义自己的常量和变量。 此时,在程序内这些常数和变量在任何地方都可以使用的问题自然会被提出,答案是否定的。 在VB中,可以在过程或模块中声明变量。 根据声明的变量位置,变量可分为过程级变量和模块级变量两种。 按范围进行分类时,进程级变量属于局部变量,模块级变量属于全局变量。 如果使用8.2.1进程级变量Dim或Static关键字在进程中声明变量,则称为进程级变量,因为只有进程中的代码才能访问或修改变量的值。 流程级变量的应用范围仅限于流程内。 例如,如果DimaAsInteger,bAsSingleStaticsAsString在流程中使用的变量没有说明,则该变量也会被视为流程级变量。Static中记述的变量在应用的执行中始终存在,Dim中记述的变量只在过程执行时存在,当过程结束时,这样的变量消失。 进程级变量是局部变量,仅在建立的进程中有效,即使是在主程序中建立的变量也不能用于调用的子进程。 【例8-1】进程级局部变量的示例。 private subform _ activate () dimasainteger、bAsInteger、cAsInteger过程级别的局部变量a=5:b=3PrintPrintTab(15 ); a ; Tab(25) b ; 在Tab(35) c=a*bPrint 调用Prod之前; Tab(14) a; Tab(24) b; 在Tab(34) cCallProdPrint 调用Prod之后; Tab(14) a; Tab(24) b; tab (34 ) cpri打印调用Sum的名称的Tab(14) a; Tab(24) b; 在Tab(34) cCallSumPrint 调用Sum之后; Tab(14) a; Tab(24) b; Tab(34) cEndSubSubProd ()通用程序DimaAsInteger、bAsInteger、cAsInteger程序级别的局部变量,图8-7程序执行结果c=a * b打印 prod子程序; Tab(14) a; Tab(24) b; Tab(34) cEndSubSubSum ()通用过程DimaAsInteger、bAsInteger、cAsInteger过程类本地变量c=a bPrintSum子过程; Tab(14) a; Tab(24) b; Tab(34) cEndSub程序的执行结果如图8-7所示。 从以上程序的执行结果可知,主程序的变量没有被带入子进程。 8.2.2模块级变量模块公共段中声明的变量属于模块级变量。 模块级变量分为私有和公共两部分。 1 .私有模块级变量私有模块级变量可用于声明该模块的所有进程,但其他模块不能访问该变量。 声明方法使用Private或Dim关键字在模块的公共段中声明变量。 例如,PrivatesAsStringDimaAsInteger,bAsSingle的作用与在模块的公共段中使用Private或Dim相同,但使用Private可以提高代码的可读性。 2 .公开的模块级变量公开的模块级变量可用于所有模块的所有进程。 由于范围是整个应用程序,因此公共模块级变量属于全局变量。 声明方法在模块的公共段中使用公共关键字声明变量。 例如,PublicaAsInteger,bAsSingle全局变量是所有程序(包括主程序和过程)都可用的内存变量。 如同在一个进程中定义的变量一样,可以在子进程中调用任意更改的全局变量,并在执行子进程时将其值返回到主程序。 将变量定义为全局变量非常有用,但是在程序中错误更改的可能性很大,因此,如果有更好的变量处理方法,请不要声明全局变量。 还可以全局声明Const语句中定义的符号常量。 【例8-2】公开的模块级全局变量的例子。 PublicaAsInteger、bAsInteger和cAsInteger将PrivateSubForm_Activate ()事件进程a=5:b=3PrintTab(15 ); a ; Tab(25) b ; 在Tab(35) c=a*bPrint 调用Prod之前; Tab(14) a; Tab(24) b; 在Tab(34) cCallProdPrint 调用Prod之后; Tab(14) a; Tab(24) b; Tab(34) cPrintPrintTab(15) a ; Tab(25) b ; 在调用Tab(35) c=abprintsum之前; Tab(14) a; Tab(24) b; 在Tab(34) cCallSumPrint 调用Sum之后; Tab(14) a; Tab(24) b; Tab(34) cEndSub,图8-8程序执行结果SubProd ()通用进程c=a * b打印 prod子进程; Tab(14) a; Tab(24) b; Tab(34) cEndSubSubSum ()公共过程c=a b打印 sum子过程; Tab(14) a; Tab(24) b; Tab(34) cEndSub程序的执行结果如图8-8所示。 从程序的执行结果可知,在模块级别在公共中声明的变量a、b、c,可以在各进程中进行访问和修改。 8.2.3变量的生存期从变量的作用空间来说,变量从有作用范围的变量的作用时间来看,变量有生存期。 假定进程内有变量,当程序的执行进入该进程时,在程序结束该进程时,变量所占用的存储器单元被释放或保留,或者变量在程序的执行中的生命周期内静态变量不释放存储单元,动态变量释放存储单元,某些局部变量必须是静态变量,而其他变量必须是动态变量。【例8-3】按照以下步骤说明静态关键字的作用。 private subform _ activate () dimiasintegerfori=1to6testsubnexttiendsubtestsub () dimxasinteger,mAsString图8-9程序执行结果Staticy,NX=x 133333 说明: x、y、m、n都是进程TestSub的局部变量,y、n被描述为静态变量,保留每次调用的上一个值,y、n的值是变化的x、m是动态变量,每次调用重新初始化为0或“”,值始终不变。 要使过程中的所有局部变量成为静态变量,请在过程标题的开头添加Static关键字。 例如,StaticFunctionRunningTotal(num )会静态化流程中的所有局部变量,无论它们是在Static、Dim或Private中声明还是隐式声明。 8.3过程的复盖范围-过程也在其上作用的范围VB中,过程的复盖范围被划分为模块级(或者文件级)和全局级(或者工程级)。 8.3.1模块级进程模块级进程是在一个模块(文件)中定义的进程。 如果在Sub或Function之前附加Private关键字,则此过程仅由在此模块(文件)中定义的过程调用。 换句话说,它的作用域是模块(文件)。 8.3.2全局级进程全局级进程在Sub或Function之前使用关键字Public来定义进程(可设置默认值)。 全局级过程由在整个应用程序的所有模块(文件)中定义的过程调用。 也就是说,其范围是整个应用程序(工程)。 8.3.3调用其它模块中的过程可在项目中的任何地方调用其它模块中的全局过程。 从其他模块调用过程的不同技术取决于过程是在表单模块、类模块还是标准模块中。 (1)调用窗体中过程的所有窗体模块的外部调用必须指向包含该过程的窗体模块。 如果表单模块Form1包含SomeSub过程,请使用以下语句调用Form1过程: CallForm1.SomeSub(arguments ),(2)调用类模块过程类似于调用表单过程。 类模块中的过程必须与过程匹配,并且必须调用指向类实例的变量。 例如,DemoClass是类Class1的实例。 与表单不同,dimdemoclassasnewclass1demo class.some sub在引用类的实例时不允许使用类名修饰符。 首先,必须将类的实例声明为对象变量(在此示例中为DemoClass ),并在变量名称中引用它。 (3)调用标准模块的程序如果程序名是唯一的话,调用时就不需要加上模块名。 无论是在模块内调用还是在模块外调用,结果总是引用此唯一的过程。 如果进程只出现在一个位置,则该进程是唯一的。 如果两个或更多模块包含同名进程,则必须使用模块名称进行限制。 例如,如果在模块1中调用模块2的公用名过程,则调用Module2.公用名(arguments )、【示例8-4】全局级过程,如图8-10所示。 应用程序(工程)包括两个表单Forml、Form2和一个标准模块Module1。 计算矩形面积的全局级别Function进程在Forml表单中定义,计算矩形周长的全局级别Function进程在标准模块Module1中定义。 两个表单的命令按钮组的Click事件过程功能相同,但调用Function过程时使用的名称不同。图8-10通过不同表单调用进程, Form1表单模块的过程代码为yas single ) assignenglearea=x * yendfunctionprivatesubcommand1_ click (indexascinteger ) dimaassingle bas singlea=val (text1(0).text ) b=val (text1(1).text ) n=index IFN=0then label2(0).caption=area (a, b ) else label2(1).caption=perimeter (a ) b ) endfendsuprivatesubform _ load () form2. show end sub,form2表单模块的过程代码如下所示: 专用子命令1 _ click (索引标签) dimaassingle bas singlea=val (文本1 (0).text ) b=val (文本1 (1).text ) n=索引标签2 (0) . caption=form1.area(a,b ) else label2(1).caption=perimeter (a ) b ) endif end sub标准模块1的程序代码: publicfunctionperimeter (xassysing yas single ) assignenglemeter=2* (xyy ) end function、8.4用户定义类型8.4.1用户定义类型的概念将某学校的学生成绩示于表8-1。 表8-1学生成绩表各列的数据类

温馨提示

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

评论

0/150

提交评论