《第八章过程PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第八章过程PPT讲稿.ppt(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第八章第八章 过程过程第1页,共45页,编辑于2022年,星期三第八章第八章 过过 程程 在程序的编写中,对于较复杂的问题,按照结构化程序设计的在程序的编写中,对于较复杂的问题,按照结构化程序设计的原则,可把问题逐步细化,分成若干个功能模块,通过原则,可把问题逐步细化,分成若干个功能模块,通过VB提供的提供的自定义过程将功能模块定义成一个个过程。自定义过程将功能模块定义成一个个过程。过程是用特定格式组织起来的一组代码,通常用来完成一个特定过程是用特定格式组织起来的一组代码,通常用来完成一个特定的功能,可以被其它过程作为一个整体来调用。的功能,可以被其它过程作为一个整体来调用。VB中自定义过程主
2、中自定义过程主要有要有2种:种:以SUB保留字开始的子程序(自定义过程和事件过程)以Function保留字开始的函数过程第2页,共45页,编辑于2022年,星期三 Sub子过程分为:事件过程和通用子过程分为:事件过程和通用Sub过程过程 8.1.1 8.1.1 事件过程事件过程事件过程事件过程 (1)窗体事件的语法窗体事件的语法Private Sub Form_事件名事件名(参数列表参数列表)语句组语句组End SubPrivate Sub Form_Click()End Sub8.1 Sub过程过程第3页,共45页,编辑于2022年,星期三 Sub子过程分为:事件过程和通用过程子过程分为:事
3、件过程和通用过程 7.1.1 事件过程事件过程 (2)控件事件过程的语法控件事件过程的语法 Private Sub 控件名控件名_事件名事件名(参数列表参数列表)语句组语句组 End SubPrivate Sub Command1_Click()Dim x As IntegerEnd Sub8.1 Sub过程过程第4页,共45页,编辑于2022年,星期三子过程的定义格式:子过程的定义格式:StaticPublic|Private Sub 子过程名子过程名(形参列表形参列表)语句组语句组 Exit Sub 语句组语句组End Sub 8.1.2 通用子过程(通用子过程(Sub过程)的定义过程)的
4、定义 Sub add()dim sum as integer sum=1+2 print sumEnd SubSub过程体过程体第5页,共45页,编辑于2022年,星期三2说明说明(1)Sub过程以过程以Sub开头,以开头,以End Sub结束,之间的程序代码是实现结束,之间的程序代码是实现Sub 过程功过程功能的程序语句序列。能的程序语句序列。(2)的命名规则与变量名相同,不允许与系统保留字同名。的命名规则与变量名相同,不允许与系统保留字同名。(3)Static、Private、Public的含义如下:的含义如下:Static:指定本:指定本Sub过程中的局部变量在内存中的默认存储方式。过程
5、中的局部变量在内存中的默认存储方式。Private:指定本:指定本Sub过程是私有(函数)过程,表明它只能被本模块中的其它过过程是私有(函数)过程,表明它只能被本模块中的其它过程所访问,而不能被其它模块中的过程所访问。程所访问,而不能被其它模块中的过程所访问。Public:指定本:指定本Sub过程是公有(过程是公有(Sub)过程,可以被本程序中的任何过程调用。)过程,可以被本程序中的任何过程调用。第6页,共45页,编辑于2022年,星期三(4)参数列表:包含了在调用时与主调过程之间需包含了在调用时与主调过程之间需要进行数据传递的变量名或数组名。参数列表的格要进行数据传递的变量名或数组名。参数列
6、表的格式如下:式如下:ByVal|ByRef()As 类型,ByVal|ByRef()As 类型(5)过程的定义不允许出现嵌套定义,即不能在一过程的定义不允许出现嵌套定义,即不能在一个过程体内再定义另一个过程。个过程体内再定义另一个过程。第7页,共45页,编辑于2022年,星期三Sub recarea(rlen As Single,rwid As Single)Dim area As Single area=rlen*rwid MsgBox Total area is&areaEnd Sub形参的定义形式:形参的定义形式:ByValByRef 变量名变量名 As 类型类型第8页,共45页,编辑
7、于2022年,星期三8.1.3 过程的调用过程的调用 1用用Call语句调用语句调用Sub过程过程格式:格式:Call 过程名过程名(实际参数列表实际参数列表)例如:例如:Call add()2 2把过程名作为一个语句来使用把过程名作为一个语句来使用把过程名作为一个语句来使用把过程名作为一个语句来使用 格式:格式:过程名过程名 实际参数列表实际参数列表例如:例如:例如:例如:add add第9页,共45页,编辑于2022年,星期三1格式:格式:Call 过程名过程名(实际参数列表实际参数列表)2 格式:格式:过程名过程名 实际参数列表实际参数列表Private Sub Form_Click()
8、Call recarea(8,4)End SubSub recarea(rlen As Single,rwid As Single)Dim area As Single area=rlen*rwid MsgBox Total area is&areaEnd Subrecarea 8,4第10页,共45页,编辑于2022年,星期三8.2 Function过程过程 在在VB中,函数分为内部函数和外部函数。内部中,函数分为内部函数和外部函数。内部函数是系统预先编制的、能完成常用的、特定功函数是系统预先编制的、能完成常用的、特定功能的程序代码,而外部函数是用户根据需要通过能的程序代码,而外部函数是用户
9、根据需要通过Function定义的过程,它的代码就是实现函数功定义的过程,它的代码就是实现函数功能的,并且将得到一个值(函数值)。能的,并且将得到一个值(函数值)。第11页,共45页,编辑于2022年,星期三 8.2.1 函数过程(函数过程(Function过程)的定义过程)的定义Static Public|Private Function 函函数数名名(形形参参列列表表)As 类类型型 Exit Function 函数名函数名=返回值返回值End Function函数体函数体Function fact(x As Integer)As Long Dim p As Long,i As Integ
10、er p=1 For i=1 To x p=p*i Next i fact=pEnd Function第12页,共45页,编辑于2022年,星期三8.2.2 函数的调用函数的调用调用格式:调用格式:函数名(实参列表)函数名(实参列表)Private Sub Command2_Click()fact(6)End SubFunction fact(x As Integer)As Long Dim p As Long,i As Integer p=1 For i=1 To x p=p*i Next i fact=pEnd FunctionDim s As Long s=Print s第13页,共45
11、页,编辑于2022年,星期三8.3 过程之间参数的传递过程之间参数的传递1、形式参数形式参数 指在定义过程时,出现过程名后面圆括号内的变量。指在定义过程时,出现过程名后面圆括号内的变量。2、实际参数实际参数 指指在在调调用用过过程程时时,写写入入子子过过程程名名或或函函数数名名后后括括号号内内的的参数。参数。3 参数传递(虚实结合)参数传递(虚实结合)指实参数据传递给形参的过程。指实参数据传递给形参的过程。参数的传递有两种方式:按值传递、按地址传递。参数的传递有两种方式:按值传递、按地址传递。形参前加形参前加“ByVal”关键字的是按值传递,缺省或加关键字的是按值传递,缺省或加“ByRef”关
12、键字的为按地址传递。关键字的为按地址传递。第14页,共45页,编辑于2022年,星期三传值与传址传值与传址 传值:传值:形参得到的是实参的值,形参值的改变不会影形参得到的是实参的值,形参值的改变不会影响实参的值。响实参的值。传址:传址:形参得到的是实参的地址,当形参值的改变同形参得到的是实参的地址,当形参值的改变同时也改变实参的值。时也改变实参的值。Sub test(ByVal x As Integer)x=x+10End SubPrivate Sub Command1_Click()Dim a As Integer a=2 Print 调用过程前:调用过程前:a=&a Call test(a
13、)Print 调用过程后:调用过程后:a=&aEnd Sub第15页,共45页,编辑于2022年,星期三Sub test(ByVal x As Integer)x=x+10End SubPrivate Sub Command1_Click()Dim a As Integer a=2 Print 调用过程前:调用过程前:a=&a Call test(a)Print 调用过程后:调用过程后:a=&aEnd Suba2x2 12传值传值:形参得到的是实参的值,形参值的改变不会影响实形参得到的是实参的值,形参值的改变不会影响实参的值。参的值。第16页,共45页,编辑于2022年,星期三Sub test
14、(x As Integer)x=x+10End SubPrivate Sub Command1_Click()Dim a As Integer a=2 Print 调用过程前:调用过程前:a=&a Call test(a)Print 调用过程后:调用过程后:a=&aEnd Suba2x12传址:传址:形参得到的是实参的地址,当形参值的改变同时也形参得到的是实参的地址,当形参值的改变同时也改变实参的值。改变实参的值。(采用按址传递方式时,实参必须是变量或数组(采用按址传递方式时,实参必须是变量或数组)第17页,共45页,编辑于2022年,星期三例:例:在窗体上放一个命令按钮在窗体上放一个命令按钮
15、Command1,编写如下代码,编写如下代码,程序运行后,单击命令按钮,输出的结果是?程序运行后,单击命令按钮,输出的结果是?Sub S1(x As Integer,y As Integer)Dim t As Integer t=x :x=y :y=tEnd SubPrivate Sub Command1_Click()Dim a As Integer,b As Integer a=10 :b=30 S1 a,b Print “a=”;a;“b=”;bEnd Suba=10 b=30ByValByVala=30 b=10第18页,共45页,编辑于2022年,星期三4 4 数组作过程的参数数组作
16、过程的参数 数组作为参数时,通过传地址方式传送。数组作为参数时,通过传地址方式传送。实参列表和形参列表中的数组只能出现数组名和括号。实参列表和形参列表中的数组只能出现数组名和括号。【例】用数组作参数,求一维数组中的所有负元素之和。【例】用数组作参数,求一维数组中的所有负元素之和。Function sum(b()as integer)as integer Dim i%For i=LBound(b)To UBound(b)If b(i)0 Then sum=sum+b(i)End If Next i End Function Private Sub Form_Click()()Dim a%(4),
17、s%,i%For i=0 To 4 a(i)=Int(Rnd*100)-50 Next i s=sum(a())Print 负元素之和为:负元素之和为:;s End Sub第19页,共45页,编辑于2022年,星期三 Private Sub Form_Click()()Dim a%(4),s%,i%For i=0 To 4 a(i)=Int(Rnd*100)-50 Next i s=sum(a())Print 负元素之和为:负元素之和为:;s End SubFunction sum(b()as integer)as integer Dim i%For i=LBound(b)To UBound(
18、b)If b(i)0 Then sum=sum+b(i)End If Next i End Functiona(0)a(1)a(2)a(3)a(4)b(0)b(1)b(2)b(3)b(4)第20页,共45页,编辑于2022年,星期三8.4 模模 块块 VB应用程序由应用程序由窗体模块窗体模块(.Frm)、标准模块、标准模块(.Bas)和类模块和类模块(.Cls)组成,组成,VB程序代码就保存在这些程序代码就保存在这些模块文件中。模块文件中。第21页,共45页,编辑于2022年,星期三8.5 过程的作用域过程的作用域Public|Private Sub 子过程名子过程名(形参列表形参列表).En
19、d Sub过程的作用域分为:过程的作用域分为:窗体窗体/模块级和全局级。模块级和全局级。1、窗体窗体/模块级过程:模块级过程:加加Private关键字的过程,只能被过程所在的窗体或关键字的过程,只能被过程所在的窗体或模模 块中的过程调用。块中的过程调用。2、全局级过程:全局级过程:加加Public关键字关键字(或缺省)(或缺省)的过程,可供该应用的过程,可供该应用程序的所有窗体和所有标准模块中的过程调用。程序的所有窗体和所有标准模块中的过程调用。第22页,共45页,编辑于2022年,星期三第23页,共45页,编辑于2022年,星期三例:例:假设工程假设工程1有一个窗体模块和一个标准模块有一个窗
20、体模块和一个标准模块第24页,共45页,编辑于2022年,星期三x=test()Print xx=Module1.test()第25页,共45页,编辑于2022年,星期三8.6 变量的作用域变量的作用域变量的作用域分为:变量的作用域分为:局部变量(过程级变量)局部变量(过程级变量)窗窗体体/模模块块级级变变量量(能能被被本本模模块块的的所所有有子子过过程程和和函数使用)函数使用)全全局局级级变变量量(能能被被应应用用程程序序的的任任何何子子过过程程和函数使用)。和函数使用)。第26页,共45页,编辑于2022年,星期三8.6.1 过程级变量过程级变量局部变量局部变量I.在过程内用在过程内用Di
21、m或或Static关键字声明的变关键字声明的变量(或不声明直接使用量(或不声明直接使用的变量);的变量);II.只能在本过程中使只能在本过程中使用。因此,可以在不用。因此,可以在不同的过程中声明相同同的过程中声明相同名字的局部变量而互名字的局部变量而互不影响。不影响。例:例:Private Sub t()Dim n%n=10End Sub Private Sub Form_Click()Dim n%Call t Print n=;nEnd Sub程序运行后单击窗体,其输出结果是什么?程序运行后单击窗体,其输出结果是什么?第27页,共45页,编辑于2022年,星期三8.6.2 窗体窗体/模块级变
22、量模块级变量 窗体窗体/模块级变量:模块级变量:I.在在“通通用用声声明明”段段中中用用Dim语语句句或或用用Private语语句句声声明明的的变量。变量。II.可可被被本本窗窗体体/模模块块的的任任何何过过程程访访问问。但但其其他他模模块块不不能能访访问问该变量。该变量。例:例:Dim n%Private Sub t()n=10End SubPrivate Sub Form_Click()Call t Print n=;nEnd Sub程序运行后单击窗体,其输出结果是什么?程序运行后单击窗体,其输出结果是什么?第28页,共45页,编辑于2022年,星期三8.6.3 全局变量全局变量I.在在窗
23、窗体体模模块块或或标标准准模模块块的的顶顶部部的的“通通用用”声声明明段段用用Public关键字声明,关键字声明,II.它它的的作作用用范范围围是是整整个个应应用用程程序序,即即可可被被本本应应用用程序的任何过程或函数访问。程序的任何过程或函数访问。例如:例如:Public a As Integer,b As single第29页,共45页,编辑于2022年,星期三3 3种变量声明及使用规则如下表:种变量声明及使用规则如下表:第30页,共45页,编辑于2022年,星期三 同同名名的的局局部部变变量量:在在不不同同过过程程中中定定义义同同名名的的局局部部 变变量量,它们互不影响。它们互不影响。同
24、同名名的的全全局局变变量量:引引用用时时就就需需要要使使用用“模模块块名名.变变量量名名”的形式来区分它们。的形式来区分它们。例例如如,如如果果有有一一个个在在 Form1 和和 Module1 中中都都声声明明了了公用的公用的 变量变量 X,则用则用 Module1.X 和和Form1.X 来引用。来引用。不同级别的同名变量:不同级别的同名变量:系统优先访问作用域小的变量系统优先访问作用域小的变量。如。如果想优先访问全局变量,则应在全局变量前加上窗体果想优先访问全局变量,则应在全局变量前加上窗体/模块名。模块名。8.6.4 8.6.4 关于多个变量同名关于多个变量同名 第31页,共45页,编
25、辑于2022年,星期三 Public Temp As Integer 定义全局变量定义全局变量Private Sub Form_Load()Temp=1 End SubPrivate Sub Command1_Click()Dim Temp As Integer 定义局部变量定义局部变量 Temp=2 Print temp=;Temp Print temp=;Form1.TempEnd SubPrivate Sub Command2_Click()Print temp=;Temp End Sub 将全局变量将全局变量Temp Temp 的值设置成的值设置成 1 1 将局部变量将局部变量Temp
26、 的值设置成的值设置成 2单击单击Command1后的输出后的输出结果是什么?结果是什么?temp=2temp=1单击单击Command2后的输出后的输出结果是什么?结果是什么?temp=1第32页,共45页,编辑于2022年,星期三8.7 静态变量静态变量是用静态变量是用Static关键字声明关键字声明的局部变量,它在程的局部变量,它在程序运行过程中可保留变量的值。序运行过程中可保留变量的值。(而用(而用Dim声明的局部变量是动态变量,每次调用声明的局部变量是动态变量,每次调用的过程结束时,都会将这些局部变量释放掉。)的过程结束时,都会将这些局部变量释放掉。)声明形式如下:声明形式如下:St
27、atic 变量名变量名 As 类型类型 Static Function 函数名(参数列表)函数名(参数列表)As 类型类型 Static Sub 过程名(参数列表)过程名(参数列表)第33页,共45页,编辑于2022年,星期三例例 有有一一个个人人编编了了下下面面一一段段程程序序,想想用用变变量量n记记录录单单击击窗窗体体的次数。的次数。Private Sub Form_Click()Dim n As Integer n=n+1 Print 已单击次数:已单击次数:;n&次次End Sub分析程序运行后多次单击窗体的输出结果:分析程序运行后多次单击窗体的输出结果:Static n As Int
28、eger第34页,共45页,编辑于2022年,星期三【例】【例】程序如下程序如下,单击窗体后输出的结果是什么?单击窗体后输出的结果是什么?Private Static Function s%()Dim sum%sum=sum+1 s=sum End Function Private Sub Form_Click()Dim i%,r%For i=1 To 5 r=s()Print 第第&i&次结果为次结果为&r Next i End Sub第35页,共45页,编辑于2022年,星期三定义过程有两种方法定义过程有两种方法:(1)在窗体的代码窗口把插入点放在所有现有过程在窗体的代码窗口把插入点放在所
29、有现有过程之外,键入关键字和过程名。之外,键入关键字和过程名。(2)(2)利用利用“工具工具”菜单下的菜单下的“添加过程添加过程”命令定义命令定义第36页,共45页,编辑于2022年,星期三8.8多重窗体与多模块程序设计多重窗体与多模块程序设计 一一个个稍稍微微复复杂杂的的应应用用程程序序,不不仅仅有有多多个个窗窗体体,还可能有标准模块和类模块,如下图所示。还可能有标准模块和类模块,如下图所示。第37页,共45页,编辑于2022年,星期三8.8.1 设置启动对象设置启动对象 在在程程序序运运行行时时,首首先先被被加加载载并并执执行行的的对对象象,称称为为程程序序的的启启动动对对象象。(可可以以
30、是是一一个个窗窗体体,也也可可以以是是标标准准模模块块中名为中名为Main的自定义的自定义Sub过程过程。)。)第38页,共45页,编辑于2022年,星期三8.8.2 窗体的加载与卸载过程窗体的加载与卸载过程 当一个窗体要显示在屏幕之前,必须先建立,接当一个窗体要显示在屏幕之前,必须先建立,接着被装入内存(着被装入内存(Load语句语句),最后显示(),最后显示(Show方法方法)在)在屏幕上。屏幕上。当窗体要结束之前,会先从屏幕上隐藏(当窗体要结束之前,会先从屏幕上隐藏(Hide方法方法),),接着从内存中删除(接着从内存中删除(Unload语句语句)(1)Load语句:将一个窗体装入到内存
31、语句:将一个窗体装入到内存 Load 窗体名称窗体名称 例如:例如:Load Form1(2)Unload语句:从内存卸载指定的窗体语句:从内存卸载指定的窗体 Unload 窗体名称窗体名称 例如例如:Unload Form1 第39页,共45页,编辑于2022年,星期三(3)Show方法:显示一个窗体方法:显示一个窗体 窗体名称窗体名称.Show 例如:例如:Form1.Show(4)Hide方法:隐藏,但仍在内存中方法:隐藏,但仍在内存中 窗体名称窗体名称.Hide 例如:例如:Form1.Hide Me.Hide第40页,共45页,编辑于2022年,星期三【例】【例】设计设计多重窗体多重
32、窗体,计算两个数据之和与乘积。,计算两个数据之和与乘积。1、窗体设计、窗体设计:该工程由三个窗体组成,其中一个为主窗体该工程由三个窗体组成,其中一个为主窗体(Form1),一个是输入数据的窗体(),一个是输入数据的窗体(Form2)、另一个窗)、另一个窗体是完成计算的窗体体是完成计算的窗体(Form3)。第41页,共45页,编辑于2022年,星期三2.有关事件过程代码有关事件过程代码(1)在标准模块)在标准模块Module1.BAS中声明全局变量中声明全局变量Public x As SinglePublic y As Single第42页,共45页,编辑于2022年,星期三Private Su
33、b Command1_Click()Form1.Hide 隐藏主窗体隐藏主窗体 Form2.Show 显示显示Form2窗体窗体End SubPrivate Sub Command2_Click()Form1.Hide 隐藏主窗体隐藏主窗体 Form3.Show 显示显示Form3窗体窗体End SubPrivate Sub Command3_Click()EndEnd Sub(2)(2)主窗体的事件代码:主窗体的事件代码:第43页,共45页,编辑于2022年,星期三 (3)Form2窗体的事件过程代码窗体的事件过程代码Private Sub Command1_Click()x=Val(text1.Text)y=Val(text2.Text)Form2.Hide Form1.ShowEnd Sub第44页,共45页,编辑于2022年,星期三 (4)Form3的事件过程代码的事件过程代码Private Sub Command1_Click()text1.Text=x+yEnd SubPrivate Sub Command2_Click()text1.Text=x*yEnd SubPrivate Sub Command3_Click()Form3.Hide Form1.ShowEnd Sub第45页,共45页,编辑于2022年,星期三