1、2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程17.1 7.1 概述l VB的应用程序是由过程(的应用程序是由过程(Procedure)组成的,)组成的,代码设计阶段的主要工作就是编写过程。代码设计阶段的主要工作就是编写过程。l VB通过事件驱动方式执行程序,调用事件过程通过事件驱动方式执行程序,调用事件过程完成对事件的响应。完成对事件的响应。l 事件过程(事件过程(Event Procedure)虽然是)虽然是VB程序程序的主体,但是有时也需要在程序中编写通用过程,的主体,但是有时也需要在程序中编写通用过程,供事件过程或者其他通用过程调用
2、。供事件过程或者其他通用过程调用。l 如果过程如果过程A调用了过程调用了过程B,则约定把,则约定把A称为主调称为主调过程,过程,B称为被调过程。称为被调过程。2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程2说明:说明:l根据通用过程是否有返回值,可以分为根据通用过程是否有返回值,可以分为Sub过程和过程和Function过程。过程。lSub过程又称为子过程,它往往用于完过程又称为子过程,它往往用于完成一些操作,而这些操作不需要有返回成一些操作,而这些操作不需要有返回值。值。lFunction过程又称为函数过程,或者简过程又称为函数过程,或者
3、简称为函数。函数过程一般应有一个返回称为函数。函数过程一般应有一个返回值。值。2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程37.2 7.2 子过程子过程的定义子过程的定义 Public|Private Sub 过程名过程名(形参列表形参列表)变量定义语句变量定义语句 执行语句执行语句 Exit Sub End Sub2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程4说明:说明:关键字关键字Sub指明了过程的性质,关键字指明了过程的性质,关键字Public和和Private则指明则指明了过
4、程的作用域。了过程的作用域。括号内为形参列表,用于从主调过程接收数据。如果过程不需括号内为形参列表,用于从主调过程接收数据。如果过程不需要参数,则可以省略形参列表。形参由传递方式、形参名和类型组成,要参数,则可以省略形参列表。形参由传递方式、形参名和类型组成,形参之间用逗号分开。形参定义的格式是:形参之间用逗号分开。形参定义的格式是:ByVal 形参名形参名 As 数据类型数据类型 ByVal是对形参进行传递方式声明,表示所声明的形参是传值是对形参进行传递方式声明,表示所声明的形参是传值参数。如果参数。如果ByVal被省略,则默认该形参是引用参数(被省略,则默认该形参是引用参数(ByRef)。
5、)。过程头部和过程头部和End Sub之间的部分称为过程体,可以在过程体中之间的部分称为过程体,可以在过程体中定义变量,过程完成的工作主要是在过程体中进行的。定义变量,过程完成的工作主要是在过程体中进行的。如果在运行子过程时需要提前退出,则可以使用如果在运行子过程时需要提前退出,则可以使用Exit Sub语句。语句。2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程5创建子过程创建子过程 第一种方法是在代码窗口中直接定义,输第一种方法是在代码窗口中直接定义,输入过程头部之后按下回车键,此时会自动出现入过程头部之后按下回车键,此时会自动出现End
6、 Sub,从而生成过程的框架。,从而生成过程的框架。第二种方法是使用第二种方法是使用“添加过程添加过程”对话框,对话框,在在“工具工具”菜单中选择菜单中选择“添加过程添加过程”命令,打命令,打开开“添加过程添加过程”对话框。对话框。2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程67.2 7.2 子过程子过程的调用子过程的调用l 通用过程不属于任何一个对象,它不由事件驱通用过程不属于任何一个对象,它不由事件驱动,必须由其他过程调用才会被执行。动,必须由其他过程调用才会被执行。l 子过程调用语句有两种形式:子过程调用语句有两种形式:Call 过
7、程名过程名(实参列表实参列表)过程名过程名 实参列表实参列表2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程7说明:说明:(1)第一种调用形式使用了关键字)第一种调用形式使用了关键字Call,而第二种调用,而第二种调用形式不仅没有形式不仅没有Call,并且也没有括号。,并且也没有括号。(2)实参即实际参数,表示传递给被调过程的一些必要)实参即实际参数,表示传递给被调过程的一些必要数据,实参之间用逗号隔开。如果调用时没有实参,则可数据,实参之间用逗号隔开。如果调用时没有实参,则可以省略实参列表和括号。以省略实参列表和括号。(3)主调过程调用被调
8、过程时,经常需要向被调过程传)主调过程调用被调过程时,经常需要向被调过程传递一些数据,这主要是通过实参与形参的结合来完成的。递一些数据,这主要是通过实参与形参的结合来完成的。形参是变量,过程调用时才被分配内存空间,过程调用语形参是变量,过程调用时才被分配内存空间,过程调用语句中的实参会把数据传递给相应的形参。句中的实参会把数据传递给相应的形参。(4)VB语言要求实参与形参个数相等,类型尽量保持语言要求实参与形参个数相等,类型尽量保持一致。实参向形参传递数据时,遵循从左向右,一一对应一致。实参向形参传递数据时,遵循从左向右,一一对应的规则。的规则。2023-12-13Visual BasicVi
9、sual Basic程序设计简明教程程序设计简明教程8例例7.17.1 计算计算n!n!Private Sub Command1_Click()Dim n As Integer n=Val(Text1.Text)Call fac(n)调用子过程调用子过程 End Sub2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程9 Private Sub fac(ByVal n As Integer)Dim s As Long,i As Integer s=1 For i=1 To n s=s*i Next i Text2.Text=Str(s)输出输出
10、n的阶乘的阶乘 End Sub2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程107.3 7.3 函数过程函数过程的定义函数过程的定义 Public|Private Function 过程名过程名(形参列表形参列表)As 类型类型 变量定义语句变量定义语句 执行语句执行语句 Exit Function End Function2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程11说明:说明:(1)函数过程的语法与子过程非常相似,其定义的关)函数过程的语法与子过程非常相似,其定义的关键字是键字是
11、Function。(2)过程头部右端的)过程头部右端的As 类型类型是指函数过程的类型,是指函数过程的类型,即返回值的类型。即返回值的类型。(3)函数过程的返回值通过对函数名赋值来指定,如)函数过程的返回值通过对函数名赋值来指定,如下所示:下所示:函数名函数名=表达式表达式 这样的赋值语句在函数过程的过程体中一般至少应这样的赋值语句在函数过程的过程体中一般至少应出现一次,作用是确定函数过程的返回值。一旦调用结束,出现一次,作用是确定函数过程的返回值。一旦调用结束,系统就会把返回值带回到主调过程的调用处。系统就会把返回值带回到主调过程的调用处。(4)如果在运行函数过程时需要提前退出,则可以使)如
12、果在运行函数过程时需要提前退出,则可以使用用Exit Function语句。语句。2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程12l变量变量=函数过程名函数过程名(实参列表实参列表)l函数调用作为表达式,出现在赋值语句的右侧。函数调用作为表达式,出现在赋值语句的右侧。调用时应给出相应的实参列表,使得实参与形调用时应给出相应的实参列表,使得实参与形参相结合。执行这条赋值语句时,先对函数过参相结合。执行这条赋值语句时,先对函数过程进行调用,然后把过程的返回值带回来并赋程进行调用,然后把过程的返回值带回来并赋给某个变量,从而使主调过程获得这个返
13、回值。给某个变量,从而使主调过程获得这个返回值。7.3 7.3 函数过程函数过程的调用函数过程的调用2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程13例例7.37.3 计算计算n!n!Private Sub Command1_Click()Dim s As Long,n As Integer n=Val(Text1.Text)s=fac(n)调用函数过程,得到返回值调用函数过程,得到返回值 Text2.Text=Str(s)End Sub Private Function fac(ByVal n As Integer)As Long 定义函
14、数过程定义函数过程 Dim s As Long,i As Integer s=1 For i=1 To n s=s*i Next i fac=s 确定函数过程的返回值确定函数过程的返回值 End Function2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程147.4 7.4 事件过程 Private Sub 对象名对象名_事件名事件名(形参列表形参列表)变量定义语句变量定义语句 执行语句执行语句 End Sub2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程15说明:说明:(1)事件过程
15、的名字是由对象名、下划)事件过程的名字是由对象名、下划线(线(_)和事件名组成,对象可以是窗体或)和事件名组成,对象可以是窗体或者控件。者控件。(2)单击和双击等事件的事件过程是没)单击和双击等事件的事件过程是没有参数的,而有些事件过程则需要参数,以有参数的,而有些事件过程则需要参数,以接收必要的数据。接收必要的数据。2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程16例例7.57.5 设计一个简易的计算器设计一个简易的计算器 l在框架在框架Frame1中创建一个命令按钮控件中创建一个命令按钮控件数组数组Command1,它有,它有4个元素,
16、分别对个元素,分别对应应“+”、“-”、“”和和“”等等4个命令个命令按钮。按钮。l创建一个文本框控件数组创建一个文本框控件数组Text1,它有,它有3个个元素,第一个元素对应的文本框负责输入元素,第一个元素对应的文本框负责输入左操作数,第二个元素对应的文本框负责左操作数,第二个元素对应的文本框负责输入右操作数,第三个元素对应的文本框输入右操作数,第三个元素对应的文本框则负责输出运算的结果。则负责输出运算的结果。2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程17 Private Sub Command1_Click(Index As Int
17、eger)Label2.Caption=Command1(Index).Caption 显示显示运算符运算符 Select Case Index Case 0 加加 Text1(2).Text=Val(Text1(0).Text)+Val(Text1(1).Text)Case 1 减减 Text1(2).Text=Val(Text1(0).Text)-Val(Text1(1).Text)Case 2 乘乘 Text1(2).Text=Val(Text1(0).Text)*Val(Text1(1).Text)Case 3 除除 If Val(Text1(1).Text)0 Then 除数不能为除
18、数不能为0 Text1(2).Text=Val(Text1(0).Text)/Val(Text1(1).Text)Else MsgBox(除数不能为除数不能为0!)Text1(1).Text=Text1(1).SetFocus End If End Select End Sub Private Sub Command2_Click()Dim i As Integer For i=0 To 2 Text1(i).Text=清除操作数和运算结清除操作数和运算结果果 Next i Label2.Caption=清除运算符清除运算符 End Sub 2023-12-13Visual BasicVisu
19、al Basic程序设计简明教程程序设计简明教程18 Private Sub Text1_KeyPress(Index As Integer,KeyAscii As Integer)If KeyAscii=13 Then 按下回车键按下回车键 If IsNumeric(Text1(Index).Text)=False Then MsgBox(必须输入数字!必须输入数字!)Text1(Index).Text=Text1(Index).SetFocus End If End If End Sub2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程19
20、7.5 7.5 参数传递的方式传值传值l调用时把实参的值调用时把实参的值从左至右,一一传从左至右,一一传递给各个形参。递给各个形参。l这种传递是单向的,这种传递是单向的,形参的值发生变化,形参的值发生变化,对实参毫无影响。对实参毫无影响。实参实参1形参形参1实参实参2形参形参22023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程20例例7.67.6 交换两个整型变量的值交换两个整型变量的值 Sub swap(ByVal a As Integer,ByVal b As Integer)传值方式传值方式 Dim t As Integer t=a a=
21、b b=t End Sub 2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程217.5 7.5 参数传递的方式传引用传引用l如果用如果用ByRef对形参进行声明,则表示对形参进行声明,则表示该参数在调用时采用传引用方式。该参数在调用时采用传引用方式。l传引用调用时形参的值发生变化,会使传引用调用时形参的值发生变化,会使实参的值也同步发生变化。实参的值也同步发生变化。2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程22例例7.77.7 传值与传引用传值与传引用 Private Sub Comm
22、and1_Click()Dim x As Integer,y As Integer x=1 y=2 Print 过程调用之前:过程调用之前:Print x=;x;y=;y Call fun(x,y)调用子过程调用子过程 Print 过程调用之后:过程调用之后:Print x=;x;y=;y End Sub Sub fun(ByVal x As Integer,ByRef y As Integer)x=x+1 y=y+1 修改了实参修改了实参y的值的值 Print 过程调用中:过程调用中:Print x=;x;y=;y End Sub 实 参 y 形 参 y 实 参 x 形 参 x 2023-1
23、2-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程237.5 7.5 参数传递的方式传数组传数组可以采用传数组的方式传递成批的数据,具可以采用传数组的方式传递成批的数据,具体实现的方法是:体实现的方法是:1.过程的形参为动态数组,形参数组的类型过程的形参为动态数组,形参数组的类型必须与实参数组的类型一致。必须与实参数组的类型一致。2.过程调用时,数组名作为过程的实参。过程调用时,数组名作为过程的实参。2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程24例7.9 求某班求某班VB考试的平均成绩考试的平均成绩
24、 Const N As Integer=30 Private Sub Command1_Click()Dim a(1 To N)As Integer,i As Integer,aver As Single For i=1 To N 输入学生成绩输入学生成绩 a(i)=Val(InputBox(请输入第请输入第&i&位学生的成绩位学生的成绩)Next i aver=average(a)调用函数过程调用函数过程 Picture1.Print 平均成绩是平均成绩是;aver End Sub Function average(b()As Integer)As Single 定义函数过程定义函数过程 D
25、im i As Integer,sum As Integer sum=0 For i=LBound(b)To UBound(b)累加学生成绩累加学生成绩 sum=sum+b(i)Next i average=sum/N 确定平均成绩是函数返回值确定平均成绩是函数返回值 End Function2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程257.6 7.6 嵌套调用与递归调用lVB语言规定,过程的定义不能嵌套,过语言规定,过程的定义不能嵌套,过程的调用可以嵌套。程的调用可以嵌套。l递归调用是一种既有趣又实用的过程调用递归调用是一种既有趣又实
26、用的过程调用形式,它是嵌套调用的特例。形式,它是嵌套调用的特例。2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程267.6 7.6 嵌套调用与递归调用嵌套调用嵌套调用l过程过程A A在执行时调用了过程在执行时调用了过程B B,过程,过程B B在执行时又调用在执行时又调用了过程了过程C C,这种现象称为嵌套调用。,这种现象称为嵌套调用。l嵌套调用的执行特点可以总结为一句话:层层调用,嵌套调用的执行特点可以总结为一句话:层层调用,逐级返回。逐级返回。Call B()Call C()过程过程A过程过程B过程过程C2023-12-13Visual B
27、asicVisual Basic程序设计简明教程程序设计简明教程277.6 7.6 嵌套调用与递归调用递归调用递归调用在过程的过程体内出现直接或间接在过程的过程体内出现直接或间接调用自身的语句,即过程在执行期间又调用自身的语句,即过程在执行期间又调用自己的现象,称为递归调用。调用自己的现象,称为递归调用。2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程28例例7.117.11 递归调用求递归调用求n n!Private Sub Command1_Click()Dim s As Long,n As Integer n=Val(Text1.Tex
28、t)s=fac(n)调用函数过程调用函数过程 Text2.Text=Str(s)End Sub Private Function fac(ByVal n As Integer)As Long 定义函数过程定义函数过程 Dim s As Long,i As Integer If n=1 Then s=1 Else s=n*fac(n-1)递归调用递归调用 End If fac=s 确定函数过程的返回值确定函数过程的返回值 End Function2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程29计算计算4!4!的递归过程:的递归过程:s=4*
29、fac(3)fac(4)fac(3)fac(2)fac(1)s=3*fac(2)s=2*fac(1)s=12023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程30递归要素:递归要素:l递归公式。使得递归调用不断进行下去的因递归公式。使得递归调用不断进行下去的因素,在本例中,递归公式是素,在本例中,递归公式是n!=n(n-1)!。l递归终止条件。使得递归调用最终结束的条递归终止条件。使得递归调用最终结束的条件,如果没有这个条件,将出现无限递归的件,如果没有这个条件,将出现无限递归的情况,最后使程序非正常终止。在本例中,情况,最后使程序非正常终止。在
30、本例中,递归终止条件是递归终止条件是1!=1。2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程317.7 7.7 作用域与生存期作用域作用域l作用域是指变量和对象等实体在程序中的有作用域是指变量和对象等实体在程序中的有效范围。只有位于实体的作用域中,才能允效范围。只有位于实体的作用域中,才能允许访问该实体。许访问该实体。lVB各种实体的作用域由小到大,主要可以划各种实体的作用域由小到大,主要可以划分为分为3个层次,它们分别是局部作用域、模块个层次,它们分别是局部作用域、模块作用域和全局作用域。作用域和全局作用域。2023-12-13Visua
31、l BasicVisual Basic程序设计简明教程程序设计简明教程32局部作用域局部作用域 l在过程内部定义的变量称为局部变量,又在过程内部定义的变量称为局部变量,又称为过程变量。称为过程变量。l局部变量的作用域是定义它的过程,既可局部变量的作用域是定义它的过程,既可以是事件过程,也可以是通用过程。以是事件过程,也可以是通用过程。l只有在本过程的内部才能使用局部变量,只有在本过程的内部才能使用局部变量,在此过程之外是不能使用这些变量的。在此过程之外是不能使用这些变量的。2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程33举例:举例:Pri
32、vate Sub Command1_Click()事件过程事件过程Command1_Click Dim a As Integer 局部变量局部变量a End Sub Private Sub Sub1()子过程子过程Sub1 Dim a As Integer 局部变量局部变量a End Sub2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程34说明:说明:(1)在不同的过程中可以定义相同名字)在不同的过程中可以定义相同名字的变量。正所谓井水不犯河水,它们分别代的变量。正所谓井水不犯河水,它们分别代表不同的局部变量,在内存中占据不同的空表不同的局
33、部变量,在内存中占据不同的空间,互不干扰。间,互不干扰。(2)过程的形参也是局部变量,其他过)过程的形参也是局部变量,其他过程无法使用。程无法使用。2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程35模块作用域模块作用域 l在模块的所有过程之外即通用段,用在模块的所有过程之外即通用段,用Dim或者或者Private定义的变量称为模块变量。定义的变量称为模块变量。l在窗体模块中定义的模块变量,又称为窗在窗体模块中定义的模块变量,又称为窗体变量。体变量。l模块变量的作用域是定义它的模块,可以模块变量的作用域是定义它的模块,可以被本模块的所有过程共
34、同使用。被本模块的所有过程共同使用。2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程36举例:举例:Dim a As Integer 模块变量模块变量a Private Sub Command1_Click()事件过程事件过程Command1_Click Print a 访问模块变量访问模块变量a End Sub Private Sub Sub1()子过程子过程Sub1 Dim b As Integer 局部变量局部变量b a=a+1 访问模块变量访问模块变量a End Sub 2023-12-13Visual BasicVisual Bas
35、ic程序设计简明教程程序设计简明教程37模块过程模块过程 l如果在模块中定义过程时,用如果在模块中定义过程时,用Private加以声加以声明,则称为模块过程。明,则称为模块过程。l在窗体模块中定义的模块过程,又称为窗体过在窗体模块中定义的模块过程,又称为窗体过程。程。l模块过程的作用域是定义它的模块,只能被本模块过程的作用域是定义它的模块,只能被本模块的所有过程所调用,其它模块的过程则无模块的所有过程所调用,其它模块的过程则无法调用。法调用。2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程38全局作用域全局作用域 l在标准模块或者窗体模块的所
36、有过程之在标准模块或者窗体模块的所有过程之外即通用段,用外即通用段,用Public定义的变量称为定义的变量称为全局变量。全局变量。l全局变量的作用域是定义它的程序,可全局变量的作用域是定义它的程序,可以被整个工程的所有模块共同使用。以被整个工程的所有模块共同使用。2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程392023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程40说明:说明:(1)在标准模块中定义的全局变量,可以在程序的)在标准模块中定义的全局变量,可以在程序的所有模块中直接使用。如果在不
37、同的标准模块中定义了所有模块中直接使用。如果在不同的标准模块中定义了相同名字的全局变量,则使用时必须指出所在的标准模相同名字的全局变量,则使用时必须指出所在的标准模块名。例如在标准模块块名。例如在标准模块Module1和和Module2中都定义了中都定义了全局变量全局变量a,则使用时应写为,则使用时应写为Module1.a和和Module2.a。(2)在窗体模块中定义的全局变量,在程序的模块)在窗体模块中定义的全局变量,在程序的模块中使用时,必须指出所在的窗体名。例如在窗体模块中使用时,必须指出所在的窗体名。例如在窗体模块Form1中定义了全局变量中定义了全局变量a,则使用时应写为,则使用时应
38、写为Form1.a。2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程41全局过程全局过程 l如果在模块中定义过程时,用如果在模块中定义过程时,用Public加加以声明,则称为全局过程。以声明,则称为全局过程。l全局过程的作用域是定义它的程序,可全局过程的作用域是定义它的程序,可以被本程序所有模块中的过程所调用。以被本程序所有模块中的过程所调用。2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程42变量屏蔽变量屏蔽 l如果具有较大作用域的变量与具有较小作如果具有较大作用域的变量与具有较小作用域的
39、变量同名,当在较小作用域内访问用域的变量同名,当在较小作用域内访问该同名变量时,访问的是具有较小作用域该同名变量时,访问的是具有较小作用域的变量,这种现象称为变量屏蔽。的变量,这种现象称为变量屏蔽。2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程43举例:举例:Dim a As Integer 定义模块变量定义模块变量a Private Sub Command1_Click()Dim a As Integer 定义局部变量定义局部变量a a=2 访问局部变量访问局部变量a End Sub2023-12-13Visual BasicVisual
40、 Basic程序设计简明教程程序设计简明教程447.7 7.7 作用域与生存期生存期生存期l生存期是指实体在程序运行过程中的生生存期是指实体在程序运行过程中的生命周期。命周期。l如果实体的生命周期结束,则该实体将如果实体的生命周期结束,则该实体将会消亡,并由系统自动回收其所占据的会消亡,并由系统自动回收其所占据的内存等资源。内存等资源。2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程45动态变量动态变量 动态变量是指在程序执行的某一时期,被动态变量是指在程序执行的某一时期,被动态地创建而又动态地撤消的一种变量。动态地创建而又动态地撤消的一种变
41、量。动态变量往往存在于一个程序的局部,创动态变量往往存在于一个程序的局部,创建和撤消都是由系统在程序执行期间自动完成建和撤消都是由系统在程序执行期间自动完成的。的。Private Sub Command1_Click()Dim i As Integer 定义局部变量定义局部变量iFor i=1 To 3Call Sub1(i)Next iEnd SubPrivate Sub Sub1(m As Integer)子过程定义子过程定义Print m=;mEnd Sub 2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程46静态变量静态变量 l静态变
42、量一般具有全局性质,存储空间在静态变量一般具有全局性质,存储空间在程序的整个运行期间是固定的。程序的整个运行期间是固定的。l静态变量在程序编译时就为其分配存储空静态变量在程序编译时就为其分配存储空间,即程序开始执行时它已经存在,程序间,即程序开始执行时它已经存在,程序执行结束时才撤消其所占内存空间。执行结束时才撤消其所占内存空间。l静态变量语法形式:静态变量语法形式:static 变量名变量名 As 类型类型2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程47静态变量举例静态变量举例 Private Sub Command1_Click()D
43、im a As Integer,i As Integer 定义局部变量定义局部变量 For i=1 To 3 a=fun1(i)函数调用函数调用 Print a=;a Next i End Sub Private Function fun1(m As Integer)函数定义函数定义 Static b As Integer 定义静态局部变量定义静态局部变量 b=b+m fun1=b 确定函数的返回值确定函数的返回值 End Function 2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程48静态过程静态过程 l如果在定义过程时,用如果在定义
44、过程时,用static关键字加以声明,关键字加以声明,则称为静态过程。则称为静态过程。l语法形式:语法形式:static Sub|Function 过程名过程名(形参列表形参列表)过程体过程体 End Sub|Function2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程497.8 7.8 滚动条l滚动条(滚动条(ScrollBar)控件通常用来直观地确定数据)控件通常用来直观地确定数据的位置,也可以作为模糊数据输入的工具。的位置,也可以作为模糊数据输入的工具。l滚动条有水平滚动条(滚动条有水平滚动条(HScrollBar)和垂直滚动条)和
45、垂直滚动条(VScrollBar)两种形式,除了方向之外,这两种)两种形式,除了方向之外,这两种滚动条的结构和操作是完全相同的。滚动条的结构和操作是完全相同的。l在工具箱中表示为:在工具箱中表示为:2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程50滚动条的常用属性滚动条的常用属性 属性属性作用作用Name设置滚动条的对象名设置滚动条的对象名Max设置滚动条所能表示的最大值设置滚动条所能表示的最大值Min设置滚动条所能表示的最小值设置滚动条所能表示的最小值LargeChange单击滚动条的空白处时,滑块移动的增量值单击滚动条的空白处时,滑块移
46、动的增量值SmallChage单击滚动条两端的箭头时,滑块移动的增量值单击滚动条两端的箭头时,滑块移动的增量值Value滑块在滚动条所处位置表示的值滑块在滚动条所处位置表示的值2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程51说明:说明:(1)程序第一个水平滚动条控件的默认对象名是)程序第一个水平滚动条控件的默认对象名是HScroll1,依次类推。如果是垂直滚动条,则其第一个,依次类推。如果是垂直滚动条,则其第一个控件的默认对象名是控件的默认对象名是VScroll1。(2)Max和和Min属性值的取值范围是属性值的取值范围是-3276832
47、767。如果滑块位于水平滚动条的最左端,或者位于垂直滚动如果滑块位于水平滚动条的最左端,或者位于垂直滚动条的最上端,条的最上端,Value的属性值就为最小值(的属性值就为最小值(Min);如果);如果滑块位于水平滚动条的最右端,或者位于垂直滚动条的滑块位于水平滚动条的最右端,或者位于垂直滚动条的最下端,最下端,Value的属性值就为最大值(的属性值就为最大值(Max)。)。(3)Value的属性值显然应该在的属性值显然应该在Max和和Min的属性值的属性值之间。如果在程序中设置之间。如果在程序中设置Value的属性值,则表示把滑的属性值,则表示把滑块移动到滚动条的相应位置。块移动到滚动条的相应
48、位置。2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程52滚动条的常用事件滚动条的常用事件 事件事件来源来源Change滚动条的滚动条的Value属性值发生改变属性值发生改变Scroll拖动滚动条的滑块拖动滚动条的滑块2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程53说明说明(1)当用户改动了滑块在滚动条中的位置,)当用户改动了滑块在滚动条中的位置,就会自动触发就会自动触发Change事件。可以通过事件。可以通过Change事件,得知滑块在滚动条中的当前位置。事件,得知滑块在滚动条中的当前
49、位置。(2)单击滚动条两端的箭头或者空白处时,)单击滚动条两端的箭头或者空白处时,并不会触发并不会触发Scroll事件。可以通过事件。可以通过Scroll事件,事件,跟踪滑块在滚动条中的动态变化。跟踪滑块在滚动条中的动态变化。2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程54例例7.177.17 用滚动条设计调色板用滚动条设计调色板 l在窗体中创建在窗体中创建3个水平滚动条,分别用于个水平滚动条,分别用于调整红色、绿色和蓝色调整红色、绿色和蓝色3个颜色分量。个颜色分量。l创建创建6个标签控件,前个标签控件,前3个标签作为滚动条个标签作为滚动
50、条的标题,后的标题,后3个标签分别用于显示个标签分别用于显示3个颜色个颜色分量的当前值。分量的当前值。l创建一个文本框控件,用于展示调整颜色创建一个文本框控件,用于展示调整颜色之后的实际效果。之后的实际效果。2023-12-13Visual BasicVisual Basic程序设计简明教程程序设计简明教程55 Private Sub HScroll1_Change()Text1.BackColor=RGB(HScroll1.Value,HScroll2.Value,HScroll3.Value)Label4.Caption=HScroll1.Value End Sub Private Sub