Visual Basic程序设计
第9章 变量与过程的作用域 ● 9.1 代码模块的概念 ● 9.4 变量与过程作用域示例 ● 9.2 变量的作用域 ● 9.5 按钮控件 第9章 变量与过程的作用域 ● 9.1 代码模块的概念 ● 9.1.1 窗体模块 ● 9.1.2 标准模块 ● 9.1.3 类模块 ● 9.2 变量的作用域 ● 9.2.1 变量作用域 ● 9.2.2 变量的生存期 ● 9.3 过程的作用 ● 9.3.1模块级过程和全局级过程 ● 9.3.2 调用其他模块中的过程 ● 9.3.3 过程的作用域及调用规则 ● 9.4 变量与过程作用域示例 ● 9.5 按钮控件 ● 9.5.1 命令按钮的属性 ● 9.5.2 命令按钮的事件 ● 习题 9
● 9.1 代码模块的概念 ● 9.1.1 窗体模块 添加新窗体的步骤为: ● 9.1 代码模块的概念 ● 9.1.1 窗体模块 添加新窗体的步骤为: 1) 选择“工程”菜单中的“添加窗体”命令,打开“添加窗体”对话框,如图9-3所示。 ● 9.1.2 标准模块 在工程中添加标准模块的步骤为: 1) 选择“工程”菜单中的“添加模块”命令,打开“添加模块”对话框,选择“新建”选项卡,如图9-4左所示。 2) 双击“模块”图标,打开新建标准模块窗口,如图9-4右所示。
3) 在属性窗口修改该模块的“名称”属性(只有“(名称)”属性),给模块命名。然后就可在标准模块的代码窗口中,向模块中添加过程。 ● 9.1.3 类模块 ● 9.2 变量的作用域 ● 9.2.1 变量作用域 ● 9.2.2 变量的生存期 1. 局部变量 例如: Dim a As Single Static x As String
【例9-1】局部变量示例。根据窗体的事件代码和通用过程,分析输出结果。 窗体Form的Activate(控件激活)事件代码为: Private Sub Form_Activate() Dim a As Integer, b As Integer, c As Integer ' 定义局部变量 a = 4: b = 7 Print Print Tab(31); "a"; Tab(41); "b"; Tab(51); "c=a+b“ Print Tab(5); "调用子过程test前的变量值"; Tab(30); a; Tab(40); b; Tab(50); c Call test Print Tab(5); "调用子过程test后的变量值"; Tab(30); a; Tab(40); b; Tab(50); c End Sub
通用过程代码: Sub test() Dim a As Integer, b As Integer, c As Integer ' 定义局部变量 c = a + b Print Tab(5); "子程序test中的变量值"; Tab(30); a; Tab(40); b; Tab(50); c End Sub 2. 窗体/模块级变量 例如: Private x As String Dim y As Integer 【例9-2】窗体/模块级变量示例。根据窗体的事件代码和通用过程,分析输出结果。 在通用段中声明: Private a As Integer, b As Integer, c As Integer ' 在通用段中定义变量
窗体Form的Activate(控件激活)事件代码: Private Sub Form_Activate() a = 4: b = 7 Print Print Tab(31); "a"; Tab(41); "b"; Tab(51); "c=a+b" Print Tab(5); "调用子过程test前的变量值"; Tab(30); a; Tab(40); b; Tab(50); c Call test Print Tab(5); "调用子过程test后的变量值"; Tab(30); a; Tab(40); b; Tab(50); c End Sub
通用过程prod: Sub prod() c = a + b Print Tab(5); "子程序test中的变量值"; Tab(30); a; Tab(40); b; Tab(50); c End Sub 3. 全局变量 【例9-3】变量使用方法示例。在一个标准模块文件中进行不同级的变量声明。 Public a As Integer ' 全局变量 Private b As String*10 ' 模块级变量 Sub test1() Dim x As Integer ' 局部变量
… End Sub Sub test2() Dim y As String ' 局部变量 ● 9.2.2 变量的生存期 1. 动态变量 2. 静态变量 3. 动态变量与静态变量使用示例 【例9-4】运行下面的程序代码,分析运行结果。 窗体Form的Activate(控件激活)事件代码:
Private Sub Form_Activate() Dim i As Integer For i = 1 To 4 ' 循环4次 tests ' 调用通用过程tests Next i End Sub 通用过程tests: Sub tests() Dim a As Integer, x As String ' 定义动态变量a和x,每次调用重新初始化 Static b, y ' 定义静态变量b和y,保留变量的值 a = a + 1 ' a为动态变量 b = b + 1 ' b为静态变量 x = x & "*" ' x为动态变量
● 9.3 过程的作用域 y = y & "*" ' y为静态变量 Print Print Tab(5); "a="; a, " b="; b, "x="; x, "y="; y End Sub ● 9.3 过程的作用域 ● 9.3.1模块级过程和全局级过程 1. 模块级过程 2. 全局级过程 ● 9.3.2 调用其他模块中的过程 ● 9.3.3 过程的作用域及调用规则
● 9.4 变量与过程作用域示例 【例9-5】设计一个模拟幸运数字机游戏。设幸运数字为7,每次由计算机随机产生3个0~10之间的随机数,当这3个随机数中有一个数字为7时,就算您赢了一次。要求利用全局变量来累计获胜次数。 设计步骤如下: 1) 建立用户界面及设置对象属性。 2) 编写事件代码。 Public n, wins 编写“生成”命令按钮Command1的Click(单击)事件代码: Private Sub Command1_Click() Label1.Caption = Int(Rnd * 10) ' 产生随机数 Label2.Caption = Int(Rnd * 10) ' 产生随机数 Label3.Caption = Int(Rnd * 10) ' 产生随机数 n = n + 1 ' 累计生成随机数的次数 ' 如果有一个数字是7,则响铃
If (Label1. Caption = 7) Or (Label2. Caption = 7) Or (Label3 If (Label1.Caption = 7) Or (Label2.Caption = 7) Or (Label3.Caption = 7) Then Beep wins = wins + 1 ' 使用全局变量,累计获胜次数 Label4.Caption = "共产生了" & Str(n) & "次随机数,您赢了" & Str(wins) & "次。" End If End Sub 编写“结束”命令按钮Command2的Click(单击)事件代码: Private Sub Command2_Click() Unload Me
【例9-6】编写程序,要求利用文本框检查用户口令,使用静态变量来限制输入口令的次数。 编写文本框的事件代码: Private Sub Text1_KeyPress(KeyAscii As Integer) Static n As Integer ' 设置静态变量 If KeyAscii = 13 Then ' Enter键 If LCase(Text1.Text) = "dingaiping" Then MsgBox "欢迎使用本系统", 0, "请多提宝贵意见" Else n = n + 1 If n = 3 Then MsgBox "对不起,您无权使用本系统。", 0, "密码错误!" Text1.Enabled = False MsgBox "您还有" & Str(3 – n) & "次机会。", 0, "对不起,口令错!" Text1.SelStart = 0 Text1.SelLength = Len(Text1.Text)
● 9.5 按钮控件 End If End Sub ● 9.5.1 命令按钮的属性 1. Cancel属性 2. Default属性 ● 9.5 按钮控件 ● 9.5.1 命令按钮的属性 1. Cancel属性 2. Default属性 3. Value属性 例如,要在程序中调用执行命令按钮Command1的Click事件过程: Command1.Value = 1 或 Command1.Value = True
● 习题 9 4. Style属性 5. Picture属性 6. DisabledPicture属性 ● 9.5.2 命令按钮的事件 ● 9.5.2 命令按钮的事件 ● 习题 9 9.1 编写程序,实现化简分数。要求:在标准模块中编写求最大公约数的Function过程,然后在窗体模块中调用,来对分数进行化简。 9.2 下面程序是利用全局变量和函数,修改例9-5后的程序。其实现功能是:设计模拟幸运数字机游戏。设幸运数字为7,每次由计算机随机产生3个0~10之间的随机数,当这3个随机数中有一个数字为7时,就算您赢了一次。要求利用函数过程计算获胜率。 请按照下面的设计步骤进行程序设计,运行成功后,分析代码。 设计步骤如下: 1) 建立用户界面及设置对象属性,参见图9-14,在例9-5基础上,增加标签Label5用来输出获胜率。 2) 编写事件代码。 在标准模块中输入下面的代码,声明全局变量。当程序运行时,程序中的每一事件过程都能访问该变量。 Public n, wins
在Module1标准模块中声明下面的函数过程: Function rate(hits, att) Percent = hits / att rate = Format(Percent, "0.0%") End Function 编写“生成”命令按钮Command1的Click事件代码: Private Sub Command1_Click() Label1.Caption = Int(Rnd * 10) Label2.Caption = Int(Rnd * 10) Label3.Caption = Int(Rnd * 10) n = n + 1
' 如果有一个数字是7,则响铃 If (Label1.Caption = 7) Or (Label2.Caption = 7) Or (Label3.Caption = 7) Then Beep wins = wins + 1 Label4.Caption = "共产生了" & Str(n) & "次随机数,您赢了" & Str(wins) & "次。" Label5.Caption = "获胜率为:" & rate(wins, n) End If End Sub 编写“结束”命令按钮Command2的Click事件代码: Private Sub Command2_Click() Unload Me