版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第8章 变量与过程的作用范围,8.1 代码模块的概念 8.1.1 窗体模块 8.1.2 标准模块 8.1.3 类模块 8.2 变量的作用范围 8.2.1 过程级变量 8.2.2 模块级变量 8.2.3 变量的生存期 8.3 过程的作用范围 8.3.1 模块级过程 8.3.2 全局级过程 8.3.3 调用其他模块中的过程,8.4 高级变量 8.4.1 使用多个同名的变量 8.4.2 公有变量与局部变量的比较 8.4.3 阴影窗体属性和控件 8.4.4 使用同名的变量和过程 8.5 用户定义类型 8.5.1 用户定义类型的概念 8.5.2 创建用户定义类型 8.5.3 建立和使用用户定义类型变量
2、8.5.4 用户定义类型数组 8.5.5 程序举例 习题八,8.1 代码模块的概念,VB应用程序(通常称为工程)的组织结构,它由窗体模块、标准模块和类模块组成。VB程序代码就保存在窗体模块文件(.Frm)、标准模块文件(.Bas)或类模块文件(.Cls)中。它们形成了工程的一种模块层次结构,如图所示。,8.1.1 窗体模块(文件扩展名为 .FRM ) 窗体模块可以包含处理事件的过程、通用过程以及变量、常数和外部过程的窗体级声明。如果要在文本编辑器中观察窗体模块,则还会看到窗体及其控件的描述,包括它们的属性设置值。写入窗体模块的代码是该窗体所属的具体应用程序专用的;它也可以引用该应用程序内的其它
3、窗体或对象。,8.1.2 标准模块(文件扩展名为BAS) 它们可以包含变量、常数、类型、外部过程和全局过程的全局(在整个应用程序范围内有效的)声明或模块级声明。写入标准模块的代码不必绑在特定的应用程序上,则在许多不同的应用程序中可以重用标准模块。,8.1.3 类模块(文件扩展名为 .CLS) 在 Visual Basic 中类模块是面向对象编程的基础。可在类模块中编写代码建立新对象。这些新对象可以包含自定义的属性和方法。实际上,窗体正是这样一种类模块,在其上可安放控件,可显示窗体窗口。,8.2 变量的作用域 概述:,在VB中,由于可以在过程中和模块中声明变量,根据定义变量的位置和定义变量的语句
4、不同,变量可以分为: 局部变量(过程级变量) 窗体/模块级变量(私有的模块级变量,能被本模块的所有过程和函数使用) 全局级变量(公有的模块级变量)。,8.2.1 过程级变量-局部变量 局部变量:在过程内用声明的变量,只能在本过程中使用。在过程内部使用 Dim 或者 Static 关键字来声明的变量,只在声明它们的过程中才能被访问或改变该变量的值,别的过程不可访问。所以可以在不同的过程中声明相同名字的局部变量而互不影响。,例: Private Sub Form_Load() Dim n% n= 10 End Sub Private Sub From_Click() Dim n% Print “n
5、=“;n End Sub,程序运行后单击窗体,其输出结果是什么?,【例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
6、); 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); c End Sub,Sub prod() 通用过程 Dim a As Integer, b As Integer, c As Integer 过程级局部变量 c = a * b Print prod子程序; Tab(14); a; Tab(24); b; Tab(34); c End Sub Sub sum() 通用过程 Dim a As Integer, b As
7、 Integer, c As Integer 过程级局部变量 c = a + b Print sum子程序; Tab(14); a; Tab(24); b; Tab(34); c End Sub,8.2.2 模块级变量,1. 私有的模块级变量:在“通用声明”段中用Dim语句或用Private语句声明的变量,可被本窗体/模块的任何过程访问。但其他模块却不能访问该变量。 例如:在“通用声明”段声明如下变量: Private s As String Dim a As Integer,2. 公有的模块级变量 公有的模块级变量也称全局变量,在窗体模块或标准模块的顶部的“通用”声明段用Public关键字声
8、明,它的作用范围是整个应用程序,即可被本应用程序的任何过程或函数访问。,【例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; T
9、ab(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); c End Sub,Sub prod() 通用过程 c = a * b Print prod子程序; Tab(14); a; Tab(24); b; Tab(34); c End Sub Sub sum() 通用过程 c = a + b Pri
10、nt prod子程序; Tab(14); a; Tab(24); b; Tab(34); c End Sub,8.2.3 变量的生存期,除作用域之外,变量还有存活期,在这一期间变量能够保持它们的值。在应用程序的存活期内一直保持模块级变量和全局变量的值。但是,对于Dim声明的局部变量仅当过程执行期间存在,当一个过程执行完毕,它的局部变量的值就已经不存在,而且变量所占据的内存也被释放。当下一次执行该过程时,它的所有局部变量将重新初始化。,局部变量的存活期由其定义的关键词来决定。 局部变量声明: Dim声明:随过程的调用而分配存贮单元,变量的初始化;过程体结束,变量的内容自动消失,存贮单元释放。 S
11、tatic声明,每次调用过程,变量保持上次调用结束时的值。 声明形式: Static 变量名 AS 类型 Static Function 函数过程名(参数列表) As 类型 Static Sub 子过程名(参数列表) 注意:过程名前加Static,表示该过程内的局部变量都是静态变量。,例 下面程序说明了Static关键字的作用。,Private Sub Form_Click() Dim i% ,isum% For i = 1 To 5 isum = sum(i) Print isum, Next i End Sub,Private Function sum(n As Integer) Dim
12、j As Integer j = j + n sum = j End Function,1 2 3 4 5,Static j As Integer 结果如何?,8.3 过程的作用范围 通用子过程和函数过程既可写在窗体模块中也可写在标准模块中,在定义时可选用关键字Private(局部)和Public(全局),来决定它们能被调用的范围。 8.3.1 模块级过程 加Private关键字的过程,只能被定义的窗体或模 块中的过程调用。 8.3.2 全局级过程 加Public关键字(或缺省)的过程,可供该应用程序的所有窗体和所有标准模块中的过程调用。 8.3.3 调用其他模块中的过程,Form1窗体模块中
13、的过程代码如下: Public Function mian_ji(x As Single, y As Single) As Single mian_ji = x * y End Function 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 = mian_ji(a, b) Else Label2(1).Caption =
14、 zhou_chang(a, b) End If End Sub Private Sub Form_Load() Form2.Show 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 If n = 0 Then Label2(0).Caption = Form1.mian_ji(a, b) Else Label2(1).Captio
15、n = zhou_chang(a, b) End If End Sub 标准模块Module1中的过程代码: Public Function zhou_chang(x As Single, y As Single) As Single zhou_chang = 2 * (x + y) End Function,8.4.1 使用多个同名的变量,一、公用变量与局部变量同名 在不同过程中定义同名变量,它们互不影响,但若在一过程中定义使用了与全局变量同名的变量,则就应注意。例如,有名为T的全局变量,然后在某过程中声明名为T的局部变量,在该过程内通过引用名字T来访问局部变量;而在该过程外通过引用名字T来
16、访问全局变量,二、全局变量同名 如果不同模块中的全局变量使用同一名字,则通过同时引用模块名和变量名就可以在代码中区分它们。 例如,如果有一个在 Form1 和 Module1 中都声明 了公用Integer变量 intX,则把它们作为MX 和FX 来引用便得到正确值。 也就是说如果不同模块中的全局变量使用同一名字,引用时就需要使用“模块名.变量名”的形式来区分它们。,8.4.2 公有变量与局部变量的比较 【例8-6】公有变量与局部变量的比较,如图8-12所示。,设计方法如下: (1) 选择新建一个新工程,进入窗体设计器。在窗体上增加一个标签Label1、一个
17、文本框Text1和两个命令按钮Command1Command2(如图8-12)。 (2) 编写代码。 首先在窗体级声明公有变量x: Public x As String,编写通用过程Test: Sub Test() Dim x As String 声明过程级变量x x = 局部变量 将过程级变量x的值设置为局部变量 Text1.Text = x 显示过程级变量x的值 End Sub 在窗体的Load事件代码中为公有变量赋值: Private Sub Form_Load() x = 公有变量 将Form1.x的值设置为公有变量 End Sub 编写命令按钮的Click事件代码: Private
18、Sub Command1_Click() Text1.Text = x 显示窗体级变量x的值 End Sub Private Sub Command2_Click() Test 调用过程,显示过程级变量x的值 End Sub,8.5.2 创建用户定义类型 可以用Type语句创建用户定义的类型,该语句必须置于模块的声明部分。其格式为 Private | Public Type 用户类型名 字段名1 As 类型名1 字段名2 As 类型名2 字段名n As 类型名n End Type,【例8-7】把数据值分别赋给stu变量中的各个字段。 首先在窗体模块的通用段创建用户定义类型: Private T
19、ype 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 s = “王 平” stu.credit = 65 stu.a
20、vg = 88 Text1(0).Text = stu.stunum Text1(1).Text = s Text1(2).Text = stu.credit Text1(3).Text = stu.avg End Sub,用户定义类型也可以作为数组元素的数据类型 【例8-8】假设某班有50位学生,每位学生一个记录,定义一个包含50个元素的用户定义数组,并给第32位学生赋值。 首先在窗体模块的通用段创建用户定义类型: Private Type studentrec stunum As String * 6 names As String * 8 credit As Intege
21、r avg As Single End 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 = stud
22、ent(32).credit Text1(3).Text = student(32).avg End Sub,【例8-9】输入学生的姓名、学号、语文分数、英语分数、数学分数,计算每名学生的个人平均成绩,并显示学生的各科成绩,如图8-14所示。 设计方法如下: (1) 选择新建一个新工程,进入窗体设计器。 (2) 编写代码。首先在窗体的通用段创建用户定义类型并且声明变量: Private Type studentrec na As String * 6 姓名变量定义为6个字符长度 no As String * 5 学号变量定义为5个字符长度 ch As Single 语文变量定义为单精度数 en
23、 As Single 英语变量定义为单精度数 ma As Single 数学变量定义为单精度数 ag As Single 平均成绩定义为单精度数 End Type Dim stu() As studentrec 定义记录数组,编写窗体的Load事件代码: Private Sub Form_Load() ReDim stu(0) End Sub 编写“输入”按钮Command1的Click事件代码: Private Sub Command1_Click() n = UBound(stu) ReDim stu(n + 1) With stu(n + 1) .no = Text1(0).Text .
24、na = Text1(1).Text .ch = Text1(2).Text .en = Text1(3).Text .ma = Text1(4).Text,.ag = Int(.ch + .en + .ma) / 3 * 100) / 100 求个人平均成绩 cc = Format(.ch, ) & Format(.en, ) & _ Format(.ma, ) & Format(Str(.ag), ) List1.AddItem Format(RTrim(.no), ) & Format(RTrim(.na), ) & cc End With Text1(0).SetFocus End S
25、ub 编写“删除”按钮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).no Text1(1).Text = stu(1).na Text1(2).Text = stu(1).ch Text1(3).Text = stu(1).en
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 48256.3-2026烟花爆竹A、B级第3部分:测试方法
- T/ZNZ 267-2024动物源性产品中牛源性成分检测 数字 PCR 法
- T/JSCTS 80-2025城市轨道交通钢轨探伤人员培训及资格规范
- T/CNCA 167.2-2025煤矿机器人通用技术要求 第2部分:管路安装机器人
- T/CBMCA 070-2025全屋空气调节系统多维评价规范
- T/CSPIA 006-2021用于人脸识别的安防摄像机图像质量评测方法
- GB/T 35795-2026全生物降解农用地面覆盖薄膜
- 2025~2026学年广东省深圳市龙岗区北师大版三年级上册课堂素养巩固练习数学试卷【附答案】
- AI赋能渔业资源养护与捕捞管理
- PFMP项目组合管理专业模拟试题(含详细答案解析)
- 幼儿园大班科学活动《有用的工具》课件
- 电气设备合同模板
- 2023版美国烧伤协会《烧伤休克复苏临床实践指南》解读
- 有限空间作业气体检测记录表
- 旧桥拆除安全培训课件
- DLT 1051-2019电力技术监督导则
- 中医四时养生
- 粮食园区项目建议书
- 超星尔雅学习通《中国古典小说鉴赏》章节测试答案
- 银行公司授信贷前调查指引
- YY/T 1669-2019反定型检测卡(柱凝集法)
评论
0/150
提交评论