程序设计教程(第6章)_第1页
程序设计教程(第6章)_第2页
程序设计教程(第6章)_第3页
程序设计教程(第6章)_第4页
程序设计教程(第6章)_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

1、过程学习目标:熟悉过程的概念及其种类。掌握熟悉过程的概念及其种类。掌握Sub过程的定义、过程的定义、建立和调用,掌握建立和调用,掌握Function过程的定义、建立和过程的定义、建立和调用。调用。掌握形参与实参的概念及其参数的两种传递方式掌握形参与实参的概念及其参数的两种传递方式 掌握过程的嵌套调用与递归调用掌握过程的嵌套调用与递归调用掌握过程和变量的作用域掌握过程和变量的作用域掌握进制转换、素数等常用算法掌握进制转换、素数等常用算法 6.1 Visual Basic的工程的工程应用程序通常包括窗体文件应用程序通常包括窗体文件(.frm)、模块文件、模块文件(.bas)和类模块和类模块(.cl

2、s),VB工程的工程的组成组成 一个一个Visual Basic工程至少包含一个窗体工程至少包含一个窗体模块,还可以根据需要模块,还可以根据需要包含若干个标准模块和包含若干个标准模块和类模块,本书将只讨论类模块,本书将只讨论窗体模块和标准模块的窗体模块和标准模块的使用方法。通过图可以使用方法。通过图可以清楚看出清楚看出Visual Basic工程的模块层次关系。工程的模块层次关系。 Public|Private Sub 子过程名子过程名(形式参数列表形式参数列表) . End Sub概念:概念:过程(或变量)的作用域指的是过程(或变量)的有效范围,即过程过程(或变量)的作用域指的是过程(或变量

3、)的有效范围,即过程(或变量)的(或变量)的“可见性可见性”。u通用子过程和函数过程既可写在窗体模块中也可写在标准模块中,在定义时可选通用子过程和函数过程既可写在窗体模块中也可写在标准模块中,在定义时可选用关键字用关键字Private(局部)和(局部)和 Public(全局)(全局),来决定它们能被调用的范围。,来决定它们能被调用的范围。 6.2 过程过程过程有两个重要作用:一是把一个复杂的任务分过程有两个重要作用:一是把一个复杂的任务分解为若干个小任务,可以用过程来表达,从而使解为若干个小任务,可以用过程来表达,从而使任务更易理解,更易实现,将来更易维护;二是任务更易理解,更易实现,将来更易

4、维护;二是代码重用,使同一段代码多次复用。代码重用,使同一段代码多次复用。VB应用程序是由过程组成的,过程是完成某种特应用程序是由过程组成的,过程是完成某种特殊功能的一组独立的程序代码。分为两大类过程。殊功能的一组独立的程序代码。分为两大类过程。事件过程是当某个事件发生时,对该事件作出响事件过程是当某个事件发生时,对该事件作出响应的程序段,它是应的程序段,它是VBVB应用程序的主体。应用程序的主体。通用过程是独立于事件过程之外,可供其他过程通用过程是独立于事件过程之外,可供其他过程调用的程序段调用的程序段。把相同的任务编成相对独立的把相同的任务编成相对独立的“子过程子过程”。当事件过程需要执行

5、这个任务时,可使用调用语句当事件过程需要执行这个任务时,可使用调用语句( (如如Call)Call)实行调用。子过程执行完后,会返回事件过程中调实行调用。子过程执行完后,会返回事件过程中调用语句用语句CallCall的后续语句继续执行的后续语句继续执行通用过程又分为通用过程又分为Sub(Sub(子程序子程序) )过程和过程和Function(Function(函数函数) )过程过程。通用过程与事件过程不同,它不依附于某一个对象,也通用过程与事件过程不同,它不依附于某一个对象,也不是由对象的某一个事件驱动、或由系统自动调用,而不是由对象的某一个事件驱动、或由系统自动调用,而是必须是被调用语句调用

6、才起作用是必须是被调用语句调用才起作用。过程调用如图所示:过程调用如图所示: 例例6 6. .1 1 使用使用SubSub过程的示例过程的示例1 1 Private Sub Form_Load() Show Call mysub1(30) Call mysub2 Call mysub2 Call mysub2 Call mysub1(30) End Sub 程序运行结果程序运行结果Private Sub mysub1(n) Print String(n, *)End SubPrivate Sub mysub2() Print *; Tab(30); *End Sub 6.2.1 Sub过程过程

7、 Form_Load()事件过程事件过程Call mysub1(30)Call mysub2Call mysub2Call mysub2Call mysub2Call mysub1(30)Mysub1过程过程Mysub2过程过程调用过程调用过程 事件事件过程过程Form_Load()中,通过中,通过Call来分别调用两个来分别调用两个Sub过程过程 Sub过程过程mysub1(n)中,中,n为参数为参数(也称形参也称形参),当调用过程,当调用过程通过通过Call mysub1(30)(30称为实参称为实参)调用时,就把调用时,就把30传给传给n,这样,这样调用后就输出调用后就输出30个个“*”

8、号号 过程过程mysub2()不带参数不带参数,其功能是输出左右两边,其功能是输出左右两边的“*”号号定义格式:定义格式:PrivatePublic Static Sub 过程名过程名(参数表参数表) 语句块语句块 Exit SubEnd Sub 1 1. Sub过程的定义过程的定义根据过程的作根据过程的作用范围任选其用范围任选其一一退出过程语句退出过程语句(2)子过程若需要接受参数,则可在过程名后的括号中定义)子过程若需要接受参数,则可在过程名后的括号中定义接受参数的变量及变量的数据类型。接受参数的变量称为形接受参数的变量及变量的数据类型。接受参数的变量称为形式参数。简称式参数。简称“形参形

9、参”,仅表示形参的类型、个数、位置,仅表示形参的类型、个数、位置,定义时是无值的,只有在过程被调用时,虚实参结合后才获定义时是无值的,只有在过程被调用时,虚实参结合后才获得相应的值。得相应的值。(3)过程可以无形式参数,但括号不能省。)过程可以无形式参数,但括号不能省。说明:说明:(1)子过程名:)子过程名:命名规则命名规则与变量名规则相同。子过程名不与变量名规则相同。子过程名不返回值,而是通过形参与实参的传递得到结果,调用时可返回值,而是通过形参与实参的传递得到结果,调用时可返回多个值。返回多个值。以字母或汉字、数字以字母或汉字、数字和下划线组成的字符和下划线组成的字符串。串。(4)参数的定

10、义形式:)参数的定义形式:ByValByRef 变量名变量名 ( )As 类型类型,,ByVal表示当该过程被调用时,参数是表示当该过程被调用时,参数是按值传递按值传递的;的;缺省缺省或或ByRef表示当该过程被调用时,参数是表示当该过程被调用时,参数是按地址传递按地址传递的。的。 如:如:public sub swap2 (ByVal X As integer, ByVal y As integer)(5) Private、Public 、Static的含义的含义q 选用选用Private(局部局部)定义过程,表明只有该过定义过程,表明只有该过程程所在模块所在模块(如窗体模块)中的过程才能调

11、用(如窗体模块)中的过程才能调用该模块;如果选用该模块;如果选用Public(全局全局)定义过程,表定义过程,表明在明在应用程序应用程序中任何地方都可以调用该模块。中任何地方都可以调用该模块。q 如果选用如果选用Static,表明,表明Sub过程中的局部变量过程中的局部变量是静态的。是静态的。2. Sub过程的建立过程的建立uSub过程可以在窗体模块过程可以在窗体模块(.frm)中建立,也可以在标准模块中建立,也可以在标准模块(.bas)中建立。中建立。1、在窗体模块、在窗体模块(.frm)中建立可以在代码窗口中完成。中建立可以在代码窗口中完成。打开代码窗口后,在对象框中选择打开代码窗口后,在

12、对象框中选择“通用通用”项,然后输入项,然后输入Sub过程头,例如过程头,例如Sub Mysub1(n),按下回车键,窗口显示:按下回车键,窗口显示: Sub Mysub1(n) End Sub此时可在此时可在Sub 和和End Sub之间输入程序代码之间输入程序代码。2、在标准模块、在标准模块(.Bas)中建立中建立Sub过程,方法是:过程,方法是: u选择选择“工程工程”菜单中的菜单中的“添加模块添加模块”命令,打开命令,打开“添加模块添加模块”对话框;再选择对话框;再选择“新建新建”或或“现存现存”选项卡,新建一个标准选项卡,新建一个标准模块获打开一个已有的标准模块。之后就可以在模块代码

13、窗口模块获打开一个已有的标准模块。之后就可以在模块代码窗口中编辑中编辑Sub过程了。过程了。 3、通过创建、通过创建Sub过程模板的方法建立过程模板的方法建立Sub过程过程: 通过通过 “工具工具”菜单中的菜单中的“添加过程添加过程”命令,出现命令,出现“添加添加过程过程”对话框(见图对话框(见图5.1),选择过程类型(子过程、函数、),选择过程类型(子过程、函数、属性、事件)及作用范围(公有的属性、事件)及作用范围(公有的Public、私有的、私有的Private),单击确定后得到一个过程或函数定义的结构框),单击确定后得到一个过程或函数定义的结构框架(模板),如:架(模板),如:Publi

14、c Sub Sort( )End Sub1. 函数过程(函数过程(Function过程)的定义过程)的定义Visual Basic函数分为内部函数和外部函数,外部函数是用户根函数分为内部函数和外部函数,外部函数是用户根据需要用据需要用Function关键字定义的函数过程,与子过程不同的是关键字定义的函数过程,与子过程不同的是函数过程将返回一个值函数过程将返回一个值 。 Public|PrivateStaticFunction 函数名函数名()As 函数名函数名=返回值返回值 Exit Function 函数名函数名=返回值返回值 End Function函数返回值的处理函数返回值的处理 6.2

15、.2 Function过程过程函数体函数体是指函数返回值的类型,如省略,返回值是变体型的。 与与Sub过程相同过程相同q 可以在可以在“代码窗口代码窗口”中直接输入来建立中直接输入来建立Function过过程。程。q 也可以选择也可以选择“工具工具”菜单中的菜单中的“添加过程添加过程”命令来命令来建立建立Function过程过程(选择选择“函数函数”类型类型) 。. Function过程的建立过程的建立 把求两个数中的大数编成把求两个数中的大数编成Function过程,过程名为过程,过程名为Max 本例采用本例采用InputBox函数输入三个数,判断出最大数后采用函数输入三个数,判断出最大数后

16、采用Print直接输出在窗体上。直接输出在窗体上。 程序代码如下:程序代码如下:Private Sub Form_Load() Show Dim a As Single, b As Single, c As Single Dim s As Single a = Val(InputBox(输入第一个数输入第一个数) b = Val(InputBox(输入第二个数输入第二个数) c = Val(InputBox(输入第三个数输入第三个数) s = max(a, b) Print 最大数是最大数是:; max(s, c)End SubFunction max(m, n) As Single If m

17、 n Then max = m Else max = n End IfEnd Function 例例6.2 输入三个数,求出它们的最大数输入三个数,求出它们的最大数q查看查看当前模块当前模块中有哪些中有哪些Sub过程和过程和Function过程:过程: 在代码窗口的对象框中选择在代码窗口的对象框中选择“通用通用”项,即可在项,即可在过程框中列出所有过程。过程框中列出所有过程。q 查看查看其他模块其他模块中的过程:中的过程: 可选择可选择“视图视图”菜单中的菜单中的“对象浏览器对象浏览器”命令,命令,在在“对象浏览器对象浏览器”对话框中,从对话框中,从“库库”列表框中列表框中选择选择工程工程,从

18、,从“类类”列表框中选择列表框中选择模块模块,此时在,此时在“成员成员” 列表框中列出该模块拥有的过程。列表框中列出该模块拥有的过程。 6.2.3 6.2.3 查看查看过程过程 事件过程是通过事件驱动和由系统自动调用的,而事件过程是通过事件驱动和由系统自动调用的,而Sub过程过程则必须通过调用语句实行调用则必须通过调用语句实行调用1. Function 过程的调用过程的调用 调用调用Sub过程有以下两种方法:过程有以下两种方法: (1)使用使用Call语句。格式:语句。格式: Call 过程名过程名(实参表实参表) (2)直接使用过程名,格式:直接使用过程名,格式: 过程名实参表过程名实参表

19、例如,调用名为例如,调用名为SubCal的过程:的过程: Call SubCal(10) SubCal 10 6.6.3. 过程过程的调用的调用对无参数过程调用,直接写过程名就行了 因为计算因为计算5!和和10!都要用到阶乘都要用到阶乘n! (n!123n) 所所以把计算以把计算n!编成编成Sub过程过程 采用采用Print直接在窗体上输出结果,程序代码:直接在窗体上输出结果,程序代码:Private Sub Form_Load() Show Dim y As Long, s As Long Call Jc(5, y) s = y Call Jc(10, y) s = s + y Print

20、5! + 10! =; sEnd Sub程序运行结果:程序运行结果: 5! + 10! 3628920Private Sub Jc(n As Integer, t As Long) Dim i As Integer t = 1 For i = 1 To n t = t * i Next iEnd Sub 注意参数注意参数n和和t的不同,的不同,n是带入参数,是带入参数,t是结果是结果参数参数 例例6.36.3 计算计算5! + 10!5! + 10! (1)直接调用直接调用 像使用像使用VB内部函数一样,只需写出函数名和相应的参数内部函数一样,只需写出函数名和相应的参数即可。例如:即可。例如:

21、 s = Max(a, b) Print Max(s, c) (2)用用Call语句调用语句调用 与调用与调用Sub过程一样来调用过程一样来调用Function过程,例如:过程,例如: Call Max(a, b) 当用这种方法调用当用这种方法调用Function过程时,将会放弃返回值过程时,将会放弃返回值 2. Function 过程的调用过程的调用 参数传递可以实现调用过程和被调过程之间的信息交换参数传递可以实现调用过程和被调过程之间的信息交换 两种两种方式:按值传递和按地址传递方式:按值传递和按地址传递6.4.1 形参与实参形参与实参 形式参数形式参数(简称形参简称形参) 指的是被调用过

22、程中的参数。出现在指的是被调用过程中的参数。出现在Sub过程或过程或Function过程中,形参可以是变量名和数据名,形参过程中,形参可以是变量名和数据名,形参表中的各个变量之间用逗号分隔。表中的各个变量之间用逗号分隔。 6.4 6.4 参数传递参数传递 实际参数实际参数(简称实参简称实参)是调用过程中的参数。写在子过程名或函数名后括是调用过程中的参数。写在子过程名或函数名后括号内,其作用是将实参数据传送给形参号内,其作用是将实参数据传送给形参。实参可由常量、表达式、有效的变量名、数组名实参可由常量、表达式、有效的变量名、数组名(后加左、右括号,如(后加左、右括号,如A( ))组成,实参表中各

23、参)组成,实参表中各参数用逗号分隔。数用逗号分隔。形参表和实参表中的对应变量名可以不同,但实参形参表和实参表中的对应变量名可以不同,但实参和形参的个数、顺序以及数据类型必须相同和形参的个数、顺序以及数据类型必须相同 定义过程和调用过程的示例:定义过程和调用过程的示例:调用过程:调用过程:Call Mysub(100, Call Mysub(100, 计算机计算机 , 1.5)1.5)定义过程:定义过程:Sub Mysub(t As Integer,s As String,y As Single)Sub Mysub(t As Integer,s As String,y As Single) “形

24、实结合形实结合”是按照位置结合的,即第一个实参值是按照位置结合的,即第一个实参值(100)传送给传送给第一个形参第一个形参t,第二个实参值,第二个实参值(“计算机计算机”)传送给第二个形参传送给第二个形参s,第三个实参值第三个实参值(1.5)传送给第三个形参传送给第三个形参y。 数组可以作为形参出现在过程的形参表中数组可以作为形参出现在过程的形参表中 输入若干个输入若干个(不超过不超过100)个学生的成绩,求出平均分、个学生的成绩,求出平均分、最高分及最低分最高分及最低分 本例采用本例采用InputBox函数来输入成绩,计算结果直接输出函数来输入成绩,计算结果直接输出到窗体上到窗体上例例6.4

25、 求出学生成绩的平均分、最高分及最低分求出学生成绩的平均分、最高分及最低分 Private Sub Form_Load()Private Sub Form_Load() Dim jc(100) As Integer, x As Integer,n As Integer, _ sum As Long, max As Integer, min As Integer n = 0 Do While True x = Val(InputBox(请输入第请输入第 & n + 1 & _ 个学生的成绩个学生的成绩(-1结束结束) If x = -1 Then Exit Do n = n + 1 jc(n)

26、= x Loop If n 0 Then Call Caljc(n, jc(), sum, max, min) Else End End If Show Print 平均分:平均分:; Format(sum / n, #.0) Print 最高分:最高分:; max Print 最低分:最低分:; min End SubEnd Sub Sub Caljc(k As Integer, darray() As Integer, _ s As Long, m As Integer, n As Integer) Dim i As Integer s = darray(1) : m = darray(1

27、) : n = darray(1) If k = 1 Then Exit Sub k是数组的下界是数组的下界 For i = 2 To k s = s + darray(i) If m darray(i) Then n = darray(i) Next i End Sub 1. 1. 按地址传递按地址传递 是是VB默认的参数传递方式默认的参数传递方式 按地址传递按地址传递(关键字关键字ByRef):把实参变量的内存地:把实参变量的内存地址传递给被调过程址传递给被调过程(如如Sub过程过程),即形参与实参使用,即形参与实参使用相同的内存地址单元。传址:相同的内存地址单元。传址: 形参得到的是实参

28、的形参得到的是实参的地址,当形参值的改变同时也改变实参的值。地址,当形参值的改变同时也改变实参的值。 例例7.2中,中,Form_Load()事件过程是通过事件过程是通过“Call Jc(5,y)”和和“Call Jc(10,y)”来调用过程来调用过程Jc(n,t)的,其的,其中采用的第二个参数就是按地址来传送数据的中采用的第二个参数就是按地址来传送数据的6.4.26.4.2 按地址传递和按值传递按地址传递和按值传递通过地址传递数据的执行过程通过地址传递数据的执行过程 Sub Swap2(x%, y%) Dim Temp% Temp = x: x = y: y = Temp End Sub a

29、 = 10: b = 20 Swap2 a, b 传地址传地址 Print A2=; a, B2=; b参数是按地址传递参数是按地址传递 按值传递按值传递(关键字关键字ByVal):通过常量传递实际参:通过常量传递实际参数,即传递参数值而不是传递它的地址,数,即传递参数值而不是传递它的地址,即将实参即将实参的值复制给形参的值复制给形参。 因为通用过程不能访问实参的内存地址,因而因为通用过程不能访问实参的内存地址,因而在通用过程中对形参的任何操作都不会影响实参在通用过程中对形参的任何操作都不会影响实参 。 2. 按值传递按值传递按值传递的执行过程如下图:按值传递的执行过程如下图:Sub Swap

30、1(ByVal x%, ByVal y%) Dim Temp% Temp = x: x = y: y = TempEnd Sub a% = 10: b% = 20 Swap1 a, b Print A1=; a, B1=; b参数是按值传递参数是按值传递 设置两个通用过程设置两个通用过程Test1和和Test2,分别按值传递和按地址传递,分别按值传递和按地址传递Private Sub Form_Load() Dim x As Integer Show x = 5 Print 执行执行test1前,前,x=; x Call test1(x) Print 执行执行test1后,后,test2前,前

31、,x=; x Call test2(x) Print 执行执行test2后,后,x=; xEnd SubSub test1(ByVal t As Integer) t = t + 5End SubSub test2(s As Integer) s = s - 5End Sub 运行结果运行结果执行执行Test1前,前,x=5执行执行Test1后,后,Test2前,前,x=5执行执行Test2后,后,x=0 例例6.5 参数传递方式示例参数传递方式示例 一个过程调用过程本身,就称为过程的递归调用一个过程调用过程本身,就称为过程的递归调用 采用递归方法来解决问题时,必须符合以下两个条采用递归方法来

32、解决问题时,必须符合以下两个条件:件: (1)可以把要解的问题转化为一个新的问题,而这个新的问可以把要解的问题转化为一个新的问题,而这个新的问题的解法仍与原来的解法相同;题的解法仍与原来的解法相同; (2)有一个明确的结束递归的条件有一个明确的结束递归的条件(终止条件终止条件),否则过程将永,否则过程将永远远“递归递归”下去下去 6.5 过程的递归调用过程的递归调用 可用下列的递归公式可用下列的递归公式 1 n=1 n(n-1)! n1 本递归中,终止条件是本递归中,终止条件是n=1n! =例例6.66.6 采用递归方法求采用递归方法求n! (n0)n! (n0)Private Sub For

33、m_Load() Dim n As Integer, m As Double Show n = Val(InputBox(输入输入115之间的整数之间的整数) If n 15 Then MsgBox 错误数据错误数据, 0, 检查数据检查数据 End End If m= fac(n) Print n; != ; mEnd SubPrivate Function fac(n) As Double If n 1 Then fac = n * fac(n - 1) 递归调用递归调用 Else fac = 1 n=1时,结束递归时,结束递归 End IfEnd Function 说明:当说明:当n1时

34、,在时,在Fac过程中调用过程中调用Fac过程,然后过程,然后n减减1,再次调用,再次调用Fac过过程,这种操作一直持续到程,这种操作一直持续到n=1为止。例如,当为止。例如,当n=3时,求时,求Fac(3)变成求变成求3Fac(2),求,求Fac(2)变成求变成求2Fac(1),而,而Fac(1)为为1,递归结束。以后再逐层,递归结束。以后再逐层返回,递推出返回,递推出Fac(2)及及Fac(3)的值的值 注意,在某次调用注意,在某次调用Fac过程时并不是立即得到过程时并不是立即得到Fac(n)的值,而是一次又一的值,而是一次又一次地进行递归调用,到次地进行递归调用,到Fac(1)时才有确定

35、的值,然后通用过程逐层返回中依次时才有确定的值,然后通用过程逐层返回中依次算出算出Fac(2)、Fac(3)的值的值Form_Load过程过程m=Fac(3)Fac过程过程调用调用Fac(3)值值为为6参数参数n为为3Fac=3*Fac(2)Fac过程过程调用调用Fac(2)值值为为2参数参数n为为2Fac=2*Fac(1)Fac过程过程调用调用Fac(1)值值为为1参数参数n为为1Fac=1 递归调用过程递归调用过程(n=3) 在在VB中,由于可以在过程中和模块中声明变量,根据定中,由于可以在过程中和模块中声明变量,根据定义变量的位置和定义变量的语句不同,变量可以分为:义变量的位置和定义变量

36、的语句不同,变量可以分为:局部变量(过程级变量)局部变量(过程级变量)窗体窗体/模块级变量(私有的模块级变量,能被本模块的所有模块级变量(私有的模块级变量,能被本模块的所有过程和函数使用)过程和函数使用)全局级变量(公有的模块级变量)。全局级变量(公有的模块级变量)。 6.6 变量的作用范围变量的作用范围1、 过程级变量过程级变量局部变量局部变量 局部变量:在过程内声明的变量,只能在本过程中使用。局部变量:在过程内声明的变量,只能在本过程中使用。 在过程内部使用在过程内部使用 Dim 或者或者 Static 关键字来声明的变量,关键字来声明的变量,只在声明它们的过程中才能被访问或改变该变量的值

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

38、语句或用语句或用Private语句声明的变量,可被本窗体语句声明的变量,可被本窗体/模块的任何过程访问。模块的任何过程访问。但其他模块却不能访问该变量。但其他模块却不能访问该变量。 例如:在例如:在“通用声明通用声明”段声明如下变量段声明如下变量: Private s As String Dim a As Integer 如果还允许其他窗体和模块中引用本模块的变量,就如果还允许其他窗体和模块中引用本模块的变量,就必须用必须用Public来声明变量,例如:来声明变量,例如: Public a as integer 假设本窗体为假设本窗体为Form1 这样,在另外一个窗体(如这样,在另外一个窗体(

39、如form2)或模块中可以用或模块中可以用Form1.a来来引用该变量。引用该变量。注意注意:不能把:不能把a误认为全局变量。因为全局变量在其他窗体和模误认为全局变量。因为全局变量在其他窗体和模块中引用时只需写块中引用时只需写a,不需要写不需要写Form1.a 2. 2. 模块级变量模块级变量 全局变量可以被应用程序中任何一个窗体和模块全局变量可以被应用程序中任何一个窗体和模块直接访问。直接访问。 全局变量要在标准模块文件全局变量要在标准模块文件(.bas)中的声明部分中的声明部分用用Global或或Public语句来声明。语句来声明。 格式:格式: Global 变量名变量名 As 数据类型

40、数据类型 Public 变量名变量名 As 数据类型数据类型3. 3. 全局变量全局变量3种变量声明及使用规则如下表:种变量声明及使用规则如下表:1、窗体、窗体/模块级过程:模块级过程: 在窗体模块或标准模块中加在窗体模块或标准模块中加Private关键字定义的过程,只能关键字定义的过程,只能被定义它的窗体模块或标准模被定义它的窗体模块或标准模 块中的过程调用。块中的过程调用。2、全局级过程:、全局级过程: 在窗体模块或标准模块中加在窗体模块或标准模块中加Public关键字定义(或缺省)的关键字定义(或缺省)的过程,可供该应用程序的所有窗体模块和所有标准模块中的过程过程,可供该应用程序的所有窗

41、体模块和所有标准模块中的过程调用。调用。按过程的作用范围来划分,过程可分为:按过程的作用范围来划分,过程可分为: 模块级过程模块级过程 全局级过程全局级过程 6.7 过程过程的作用范围的作用范围总结归纳过程的定义及作用域如下表总结归纳过程的定义及作用域如下表u生存期,也即变量能够保持其值的时间生存期,也即变量能够保持其值的时间 。根据变量的生。根据变量的生存期,可将变量分为动态变量和静态变量存期,可将变量分为动态变量和静态变量 1. 动态变量动态变量 动态变量是指程序运行进入变量所在的过程时,才分配给该动态变量是指程序运行进入变量所在的过程时,才分配给该变量的内存单元,经过处理退出该过程时,该

42、变量占用的内存单变量的内存单元,经过处理退出该过程时,该变量占用的内存单元自动释放,其值消失。当再次进入该过程时,所有的动态变量元自动释放,其值消失。当再次进入该过程时,所有的动态变量将重新初始化。将重新初始化。u 使用使用Dim关键字在过程中声明的局部变量属于动态变量关键字在过程中声明的局部变量属于动态变量 (补充)变量(补充)变量的生存期的生存期 u静态变量是指程序运行进入该变量所在的过程时,静态变量是指程序运行进入该变量所在的过程时,修改变量的值后退出该过程时,其值依然保留,变修改变量的值后退出该过程时,其值依然保留,变量所占的内存单元不被释放。当再次进入该过程时,量所占的内存单元不被释

43、放。当再次进入该过程时,原来的变量值可继续使用。原来的变量值可继续使用。u使用使用Static关键字在过程中声明的局部变量属于静关键字在过程中声明的局部变量属于静态变量。态变量。u声明形式:声明形式: Static 变量名变量名 AS 类型类型Static Function 函数过程名函数过程名(参数列表参数列表) As 类型类型Static Sub 子过程名子过程名(参数列表参数列表) 注意:过程名前加注意:过程名前加Static,表示该过程内的局部变量都是静态变,表示该过程内的局部变量都是静态变量。量。 2. 静态变量静态变量 例例6.7 使用使用Static Sub语句的示例语句的示例

44、Static Sub Subtest() Dim t As Integer t为静态变量为静态变量 t = 2 * t + 1 Print t End Sub Private Sub Command1_Click() Call Subtest 调用子过程调用子过程Subtest End Sub 2. 静态变量静态变量 例:有一个人编了下面一段程序,想用变例:有一个人编了下面一段程序,想用变量量n记记录单击窗体的次数。录单击窗体的次数。Private Sub Form_Click() Dim n As Integer n = n + 1 Print 已单击次数:已单击次数:; n & 次次End

45、 Sub静态变量静态变量分析程序运行后多次单击窗体的输出结果:分析程序运行后多次单击窗体的输出结果: 要记录单击窗体次数,如何实现?并比较使用模块变量和静要记录单击窗体次数,如何实现?并比较使用模块变量和静态变量的差别。态变量的差别。Private Sub Form_Click() satic n As Integer n = n + 1 Print 已单击次数:已单击次数:; n & 次次End Sub 运行后,多次单击命令按钮运行后,多次单击命令按钮Command1,执行结果为:执行结果为: 1 3 7 将将Static Sub改为改为Private Sub后,运行过程中多次单击命令后,运

46、行过程中多次单击命令按钮按钮Command1,执行结果为:,执行结果为: 1 1 1 6.8 shell调用调用Shell就是一个打开应用程序的函数,所带的参数为样式参数。功能功能:执行一个可执行文件,返回一个 Variant (Double),如果成功的话,代表这个程序的任务 ID,若不成功,则会返回 0。 格式格式:Shell(PathName,WindowStyle)PathName为必需参数。类型为String,它指出了要执行的程序名,以及任何需要的参数或命令行变量,也可以包括路径名。WindowStyle为可选参数。Integer类型,指定在程序运行时窗口的样式。如果windowst

47、yle省略,则程序是以具有焦点的最小化窗口来执行的。WindowStyle的取值及其描述如下表所示。1 打开记事本打开记事本 Private Sub Command1_Click() Shell Notepad E:VB练习添加DTPicker控件.txt , vbNormalFocus End Sub注:NotePad后有空格2 打开打开QQ登陆界面登陆界面 Private Sub Command2_Click() Shell D:Program FilesTencentQQ2009Binqq.exe, vbNormalFocus End Sub3 打开打开Word文档文档 Private Sub Command3_Click(Index As Integer) Dim strDir As String strDir = E:VB练习练习Test.doc Select Case Index Case 0 Shell C:Program FilesMicrosoft OfficeOFFICE11WINWORD.EXE & strDir, vbHide Case 1 Shell C:Program FilesMicrosoft OfficeOFFICE11WINWORD.EXE & strDir, vbNormalFocus Case 2 Shell C:

温馨提示

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

评论

0/150

提交评论