VB程序设计第3版第8章.ppt

上传人:wuy****n92 文档编号:54745481 上传时间:2022-10-29 格式:PPT 页数:124 大小:1.17MB
返回 下载 相关 举报
VB程序设计第3版第8章.ppt_第1页
第1页 / 共124页
VB程序设计第3版第8章.ppt_第2页
第2页 / 共124页
点击查看更多>>
资源描述

《VB程序设计第3版第8章.ppt》由会员分享,可在线阅读,更多相关《VB程序设计第3版第8章.ppt(124页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、计计算算机机程程序序设设计计基基础础第第8 8章章过过 程程本章要点本章要点:Function过程过程Sub过程过程参数的传递参数的传递过程的嵌套调用过程的嵌套调用过程的递归调用过程的递归调用Vb工程结构及过程的作用域工程结构及过程的作用域变量的作用域与生存期变量的作用域与生存期1第第八八章章 过过 程程 什么是过程什么是过程?过程过程是一段程序,能是一段程序,能完成一种相对独立的完成一种相对独立的功能,可供其他程序使用功能,可供其他程序使用(调用调用)。使完成同类操作的代码不重复使完成同类操作的代码不重复过程的引入:过程的引入:被调用过程:被调用过程:被其他程序使用的过程,被其他程序使用的过

2、程,又称为子过程、子程序。又称为子过程、子程序。调用过程调用过程:调用其他过程的程序,又:调用其他过程的程序,又称主过程、主程序。称主过程、主程序。概念:概念:2第第八八章章 过过 程程调用过程调用过程:子过程子过程:Sprg1子过程子过程:Sprg2调用调用Sprg1调用调用Sprg1调用调用Sprg2过程的执行:过程的执行:3第第八八章章 过过 程程Sub过程过程Function过程过程(函数过程)(函数过程)事件过程事件过程自定义自定义Sub过程过程内部函数内部函数自定义函数过程自定义函数过程常用过程常用过程的的分类分类:本章主要介绍自定义本章主要介绍自定义函数函数过程和自定义过程和自定

3、义Sub过程,统称为过程,统称为“通用过程通用过程”。4第第八八章章 过过 程程8.1 Function过程过程(函数过程函数过程)当在程序中要重复处理某一函数关系,当在程序中要重复处理某一函数关系,而又没有现成的内部函数可以使用时,程而又没有现成的内部函数可以使用时,程序员可以自己定义函数,并采用与调用内序员可以自己定义函数,并采用与调用内部函数相同的方法来调用自定义函数。部函数相同的方法来调用自定义函数。5第第八八章章 过过 程程语句组语句组函数过程名函数过程名=表达式表达式Exit Function 语句组语句组函数过程体函数过程体1.Function过程的格式过程的格式Public|P

4、rivateStatic Function 函数过函数过程名程名 (形参表形参表)As 类型类型End Function8.1.1 Function过程的定义过程的定义注意注意:Function过程的定义过程的定义不能嵌套不能嵌套。6第第八八章章 过过 程程说明说明:Public:缺缺省省值值。使使用用Public时时表表示示各各模模块块的所有其他过程都可以调用该过程。的所有其他过程都可以调用该过程。Private:使使用用Private时时表表示示只只有有本本模模块块中中的其他过程才可以调用该的其他过程才可以调用该Function过程。过程。Static:使使用用Static时时表表示示将将

5、过过程程中中的的所所有有局局部变量说明为静态变量。部变量说明为静态变量。函数过程名函数过程名:应遵循变量的命名规则。应遵循变量的命名规则。形形参参表表:Function过过程程的的参参数数列列表表。多多个个参参数之间用逗号隔开。可以是:数之间用逗号隔开。可以是:ByVal|ByRef|Optional|ParamArray 参参数名数名()As 类型类型7第第八八章章 过过 程程As 类类型型:定定义义函函数数过过程程的的返返回回值值的的数数据据类型,类型,Function过程通过赋值语句过程通过赋值语句:函数过程名函数过程名=表达式表达式 将函数的返回值赋给将函数的返回值赋给“函数过程名函数

6、过程名”。如果省略该语句,则数值函数过程返回如果省略该语句,则数值函数过程返回0,字符串函数过程返回空串。,字符串函数过程返回空串。Exit Function语句语句:从从Function过程中退过程中退出。出。8第第八八章章 过过 程程2.Function过程的建立过程的建立 建立位置:模块的通用声明段建立位置:模块的通用声明段窗体模块窗体模块标准模块标准模块类模块类模块建立方法建立方法直接在代码窗口中输入直接在代码窗口中输入使用菜单命令:使用菜单命令:工具工具|添加过程添加过程 先切换到代码窗口,才可以使用该菜单先切换到代码窗口,才可以使用该菜单命令。命令。9第第八八章章 过过 程程分析:

7、分析:假设函数过程名称为假设函数过程名称为F。求表达式。求表达式 的的值需要已知值需要已知x、y、z的值,因此应给函数的值,因此应给函数过程设置三个参数过程设置三个参数x、y、z。在过程体中。在过程体中需要给需要给F赋值,以便通过函数过程名赋值,以便通过函数过程名F返返回函数值。回函数值。【例【例8-1】编写一个计算编写一个计算以下表达式值的函以下表达式值的函数过程。数过程。代码代码:Function F(X As Single,Y As Single,_ Z As Single)As Single F=Sqr(Abs(X 3+Y 3+Z 3)End Function10第第八八章章 过过 程

8、程分析:分析:假设函数过程名称为假设函数过程名称为Fact。求。求N!只!只需给函数过程设置一个参数需给函数过程设置一个参数N。函数过程。函数过程体的功能就是求体的功能就是求Fact=N!【例【例8-2】编写一个计算】编写一个计算N!的函数过程。!的函数过程。代码代码:Function Fact(N As Integer)As Long Dim I As Integer,F As Long F=1 F用于保存阶乘值用于保存阶乘值 For I=1 To N F=F*I Next I Fact=F 给函数过程名给函数过程名Fact赋值赋值 End Function11第第八八章章 过过 程程分析:

9、分析:假设函数过程名为假设函数过程名为Sum。本例需要用数组作。本例需要用数组作参数,设数组参数名为参数,设数组参数名为X,则要在,则要在X之后加一对空之后加一对空圆括号。函数过程的功能就是求数组圆括号。函数过程的功能就是求数组X的所有元的所有元素之和,保存到函数名素之和,保存到函数名Sum中。中。【例【例8-3】编写一个求一维数组各元素和的编写一个求一维数组各元素和的函数过程。函数过程。代码代码:Function Sum(X()As Integer)As Long S=0 For I=LBound(X)To UBound(X)S=S+X(I)Next I Sum=S 给函数过程名赋值给函数过

10、程名赋值End Function12第第八八章章 过过 程程8.1.2 Function过程的调用过程的调用1.调用位置调用位置 直接在表达式中调用。直接在表达式中调用。2.调用格式调用格式 函数过程名函数过程名(实参表实参表)其中,其中,“实参表实参表”可以是可以是常量、变量、表达式、常量、变量、表达式、数组名数组名()“实参表实参表”各参数之间用逗号分隔各参数之间用逗号分隔实参表的个数、顺序、类型要与形参一致实参表的个数、顺序、类型要与形参一致13第第八八章章 过过 程程【例【例8-4】输入输入m和和n的值,调用例的值,调用例8-2的函数的函数过程过程Fact求组合数。求组合数公式如下:求

11、组合数。求组合数公式如下:Text2Text1Text3Command1设计界面:设计界面:14第第八八章章 过过 程程Function Fact(N As Integer)As LongEnd Function1)在模块的通用声明段编写)在模块的通用声明段编写例例8-2的的函数函数过程:过程:Dim I As Integer,F As Long F=1 For I=1 To N F=F*I Next I Fact=F代码设计:代码设计:15第第八八章章 过过 程程Private Sub Command1_Click()Dim m As Integer,n As Integer,_ c As

12、Double n=Val(Text1.Text)m=Val(Text2.Text)c=Fact(m)/(Fact(n)*(Fact(m-n)Text3.Text=cEnd Sub2)编写调用程序编写调用程序 16第第八八章章 过过 程程【例例8-5】生成生成10个包含个包含1,5之间的随机整之间的随机整数的一维数组,调用例数的一维数组,调用例8-3的函数过程求该数的函数过程求该数组的所有元素之和。组的所有元素之和。设计界面:设计界面:Text1Label1Command1Command217第第八八章章 过过 程程1)在代码窗口的通用声明段声明数组)在代码窗口的通用声明段声明数组A为为具有具有

13、10个元素的一维整型数组,使个元素的一维整型数组,使A成为成为模块级数组。模块级数组。代码设计:代码设计:Dim A(1 To 10)As Integer18第第八八章章 过过 程程Function Sum(x()As Integer)As Long End Function2)编写例)编写例8-3的函数过程的函数过程Sum:S=0 For i=LBound(X)To UBound(X)S=S+X(i)Next i Sum=S 19第第八八章章 过过 程程Private Sub Command1_Click()Randomize Text1.Text=For i=1 To 10 A(i)=In

14、t(Rnd*5+1)Text1.Text=&Str(A(i)Next iEnd Sub3)在)在“生成数据生成数据”按钮按钮Command1的的Click事件过程中编写代码,生成事件过程中编写代码,生成10个个1,5区间的随机整数,保存到数组区间的随机整数,保存到数组A中,中,同时显示在文本框同时显示在文本框Text1中中:20第第八八章章 过过 程程4)编写)编写“求和求和”按钮按钮Command2的的Click事事件过程,调用函数过程件过程,调用函数过程Sum求数组各元素求数组各元素的和,并将和值显示在标签的和,并将和值显示在标签Label1中。中。Private Sub Command2

15、_Click()Label1.Caption=Sum(A()End Sub21第第八八章章 过过 程程【例【例8-6】编写函数过程求两个数的最大公】编写函数过程求两个数的最大公约数,通过调用该函数过程求三个数的最约数,通过调用该函数过程求三个数的最大公约数。大公约数。设计界面:设计界面:Text1Label2Text2Command1Text322第第八八章章 过过 程程Function gcd(m As Integer,n As Integer)_ As Integer Dim r As Integer r=m Mod n 求求m除以除以n的余数的余数r Do While r 0 当余数不为

16、当余数不为0时进入循环时进入循环 m=n 将除数将除数n作为被除数作为被除数m n=r 将余数将余数r作为除数作为除数n r=m Mod n 求求m除以除以n的余数的余数r Loop gcd=nEnd Function代码设计:代码设计:1)定义求两个数的最大公约数的函数过程)定义求两个数的最大公约数的函数过程:23第第八八章章 过过 程程Private Sub Command1_Click()Dim A As Integer,B As Integer,_ C As Integer Dim X As Integer,Y As Integer A=Val(Text1.Text)B=Val(Tex

17、t2.Text)C=Val(Text3.Text)X=gcd(A,B)Y=gcd(X,C)Label2.Caption=YEnd Sub2)在在Command1的的Click事件过程中调用事件过程中调用函数过程函数过程gcd求三个数的最大公约数。求三个数的最大公约数。24第第八八章章 过过 程程【例【例8-7】编写判断一个数是否为素数的函】编写判断一个数是否为素数的函数过程,利用该函数过程验证哥德巴赫猜数过程,利用该函数过程验证哥德巴赫猜想:一个不小于想:一个不小于6的偶数可以表示为两个的偶数可以表示为两个素数之和。例如素数之和。例如6=3+3 8=3+5 10=3+7。设计界面:设计界面:T

18、ext1Text2Command1Text325第第八八章章 过过 程程1)编写判断素数的函数过程)编写判断素数的函数过程isprime:代码设计:代码设计:Function isprime(n As Integer)As Boolean K=Int(Sqr(n):I=2 Do While I=K If n Mod I 0 Then I=I+1 不能整除,不能整除,I值累加值累加1 Else Exit Do 整除,退出循环整除,退出循环 End If Loop If I=K Then isprime=False Else _ isprime=TrueEnd Function26第第八八章章 过

19、过 程程2)编写)编写Command1的的Click事件过程,从文事件过程,从文本框本框Text1输入数据输入数据N,将该数分解为两个,将该数分解为两个素数:素数:Private Sub Command1_Click()Dim n As Integer,n1 As Integer,_ n2 As Integer,flag As Integer n=Val(Text1.Text)flag=0 If n 6 Or n Mod 2 0 Then MsgBox 数据错,请重输数据错,请重输 Text1.SelStart=0 Text1.SelLength=Len(Text1.Text)27第第八八章章

20、 过过 程程 Else For n1=3 To n 2 Step 2 n2=n-n1 If isprime(n1)And isprime(n2)Then flag=1 Exit For End If Next n1 28第第八八章章 过过 程程 If flag=1 Then Text2.Text=n1 Text3.Text=n2 Else MsgBox 不能分解为两个素数不能分解为两个素数 End If End IfEnd Sub29第第八八章章 过过 程程【例【例8-8】编写一个函数过程返回指定个数】编写一个函数过程返回指定个数的字符串,字符串以的字符串,字符串以A开始,例如,当指开始,例如

21、,当指定个数为定个数为5时,函数过程返回字符串时,函数过程返回字符串“A B C D E”(字符之间有一个空格)。编写(字符之间有一个空格)。编写窗体的窗体的Click事件过程,调用该函数过程,事件过程,调用该函数过程,实现在窗体上按指定的行数输出如实现在窗体上按指定的行数输出如下所示下所示的图形。的图形。30第第八八章章 过过 程程1)编写函数过程)编写函数过程CreateStr,返回,返回N个字符个字符:代码设计:代码设计:Private Function CreateStr(N As Integer)As String Dim TmpStr As String,I As Integer,

22、_ StrAsc As Integer TmpStr=StrAsc=Asc(A)1 For I=1 To N StrAsc=StrAsc+1 TmpStr=TmpStr&Space(1)&Chr(StrAsc)Next I CreateStr=TmpStrEnd Function31第第八八章章 过过 程程2)编写窗体的)编写窗体的Click事件过程,通过调用函事件过程,通过调用函数过程数过程CreateStr打印所要求的图形打印所要求的图形Private Sub Form_Click()Dim N As Integer,I As Integer N=Val(InputBox(图形的行数图形的

23、行数,请输入请输入,5)Cls:Print For I=1 To N Print Tab(2*I);Print CreateStr(2*N-2*I+1);Print Spc(4);Print CreateStr(2*I-1)Next IEnd Sub32第第八八章章 过过 程程8.2 Sub过程过程 当需要自定义过程返回一个值时,使用当需要自定义过程返回一个值时,使用Function过程很容易实现。过程很容易实现。但在实际应用中,可能希望过程不需要但在实际应用中,可能希望过程不需要返回值,例如,使用过程打印一个图形;返回值,例如,使用过程打印一个图形;或需要过程返回多个值,例如,利用过程或需要

24、过程返回多个值,例如,利用过程对一批数据进行排序,在这些情况下就需对一批数据进行排序,在这些情况下就需要使用要使用Sub过程过程。Sub过程也称子过程。过程也称子过程。33第第八八章章 过过 程程 Private|PublicStatic Sub 过程名过程名 (形参形参表表)End Sub1.Sub过程的格式过程的格式 语句组语句组 Exit Sub 语句组语句组8.2.1 Sub过程的定义过程的定义Sub过程体过程体34第第八八章章 过过 程程2.说明说明“过程名过程名”不具有值的意义,在不具有值的意义,在Sub过过程中不能给程中不能给“过程名过程名”赋值,也不能给赋值,也不能给“过程名过

25、程名”定义类型。定义类型。Exit Sub用于退出用于退出Sub过程。过程。Sub过程通过过程通过“形参表形参表”中的参数返回中的参数返回值。值。Sub过程的建立方法与过程的建立方法与Function过程的过程的建立方法相同。建立方法相同。35第第八八章章 过过 程程分析:分析:设设Sub过程名为过程名为S,首先要设置三个,首先要设置三个参数,如参数,如x、y、z,用于接收三个原始数,用于接收三个原始数据,另外再设置两个参数据,另外再设置两个参数max和和min,用,用于返回最大和最小数。子过程体要实现的于返回最大和最小数。子过程体要实现的功能就是求参数功能就是求参数x、y、z的最大值和最小的

26、最大值和最小值,保存到参数值,保存到参数max和和min中中【例【例8-9】编写】编写Sub过程,求三个数中的最大过程,求三个数中的最大数和最小数。数和最小数。36第第八八章章 过过 程程代码设计:代码设计:Sub s(x As Single,y As Single,z As Single,_ max As Single,min As Single)max=x If y max Then max=y If z max Then max=z min=x If y min Then min=y If z max Then max=x(i)If x(i)max Then max=Val(x(I)If

27、 Val(x(I)0。单击窗单击窗体时调用该过程打印体时调用该过程打印51、52、53、54、55的的值。值。Function Power(x As Single,ByVal y As_ Integer)End Function Dim result As Single result=1 Do While y 0 result=result*x y=y-1 Loop Power=result57第第八八章章 过过 程程Private Sub Form_Click()Dim i As Integer For i=1 To 5 Print Power(5,i)Next iEnd Sub思考思考:如

28、果取消过程如果取消过程Power中参数中参数y前的关前的关键字键字ByVal,则会出现什么情况?则会出现什么情况?58第第八八章章 过过 程程【例例8-15】假设编写了如下的假设编写了如下的Sub过程,实过程,实现对任意两个数的交换。现对任意两个数的交换。Sub swap(ByRef x,ByRef y)t=x x=y y=tEnd Sub59第第八八章章 过过 程程 以下事件过程调用该以下事件过程调用该Sub过程实现对两个过程实现对两个变量变量a、b值的交换值的交换:Private Sub Command1_Click()a=1 b=2 swap a,b 调用调用Sub过程过程 Print

29、a;bEnd Sub如果本例中的形参定义成按值传递,则如果本例中的形参定义成按值传递,则无法实现交换变量无法实现交换变量a、b的值。的值。注意:使用数组作为参数时只能按地址注意:使用数组作为参数时只能按地址传递,不能按值传递。传递,不能按值传递。60第第八八章章 过过 程程【例【例8-16】编写一个编写一个Sub过程,实现对任意过程,实现对任意一维数组按从小到大排序。生成一维数组按从小到大排序。生成100个个1,50之间的随机整数,调用该之间的随机整数,调用该Sub过程测试过程测试其功能。其功能。设计界面:设计界面:Text1Command1Text261第第八八章章 过过 程程代码设计:代码

30、设计:1)设计)设计Sub过程过程SortArray:Sub SortArray(x()As Integer)Dim i As Integer,j As Integer l1=LBound(x)获取获取x数组下标的下界数组下标的下界 l2=UBound(x)获取获取x数组下标的上界数组下标的上界 For i=l1 To l2-1 For j=i+1 To l2 If x(i)x(j)Then t=x(i):x(i)=x(j):x(j)=t End If Next j Next iEnd Sub62第第八八章章 过过 程程2)在窗体模块的通用声明段声明数组)在窗体模块的通用声明段声明数组a为为具

31、有具有100个元素的一维整型数组:个元素的一维整型数组:Dim a(1 To 100)As Integer注意将该语句写在注意将该语句写在Sub过程的前面过程的前面63第第八八章章 过过 程程3)为测试)为测试Sub过程的作用,在窗体的过程的作用,在窗体的Load事件过程中生成随机数保存到数组事件过程中生成随机数保存到数组a中,中,并将其显示在文本框并将其显示在文本框Text1中:中:Private Sub Form_Load()Randomize For i=1 To 100 a(i)=Int(50*Rnd+1)Text1.Text=&Str(a(i)&Next iEnd Sub64第第八八

32、章章 过过 程程4)在)在“排序排序”按钮的按钮的Click事件过程中,调事件过程中,调用用SortArray过程进行排序,并将排序结过程进行排序,并将排序结果显示在文本框果显示在文本框Text2中:中:Private Sub Command1_Click()Call SortArray(a()For i=1 To 100 Text2.Text=&Str(a(i)&Next iEnd Sub65第第八八章章 过过 程程8.3.3 使用可选参数使用可选参数Visual Basic还允许定义过程时指定可选的参数,还允许定义过程时指定可选的参数,如果在某个形参前加上关键字如果在某个形参前加上关键字O

33、ptional,则表示,则表示该参数是可选的,在调用该过程时可以不提供与该参数是可选的,在调用该过程时可以不提供与此形参对应的实参。此形参对应的实参。在过程中,可以使用在过程中,可以使用IsMissing函数判断是否向可函数判断是否向可选参数传递了实参。选参数传递了实参。IsMissing函数语法如下:函数语法如下:IsMissing(参数名参数名)参数名:是指一个可选参数的名称。如果没有给参数名:是指一个可选参数的名称。如果没有给“参数名参数名”指定的参数传递值,则指定的参数传递值,则IsMissing函数函数返回返回True,否则返回,否则返回False。66第第八八章章 过过 程程【例例

34、8-17】编写一个函数过程】编写一个函数过程SquareSum,用于求两个数的平方和,或求三个数的平用于求两个数的平方和,或求三个数的平方和。方和。分析:分析:根据题目要求,可以为函数过程根据题目要求,可以为函数过程SquareSum设置三个参数,其中一个为可设置三个参数,其中一个为可选参数选参数。Function SquareSum(a,b,Optional c)SquareSum=a 2+b 2 If Not IsMissing(c)Then SquareSum=SquareSum+c 2 End IfEnd Function代码如下:代码如下:67第第八八章章 过过 程程 在调用程序中,

35、既可以求两个数的平方和,在调用程序中,既可以求两个数的平方和,也可以求三个数的平方和也可以求三个数的平方和。例如:例如:Print SquareSum(2,4)Print SquareSum(2,4,6)注意注意:可选参数必须放在形参表的最后:可选参数必须放在形参表的最后,且必须为且必须为Variant类型。类型。68第第八八章章 过过 程程8.3.4 使用可变参数使用可变参数如果希望在调用语句中可以提供任意个参如果希望在调用语句中可以提供任意个参数,则可以通过定义可变参数来实现数,则可以通过定义可变参数来实现。在定义一个过程时,可以将其形参表中最在定义一个过程时,可以将其形参表中最后一个形参

36、定义为后一个形参定义为ParamArray关键字修关键字修饰的数组,则该过程在被调用时可以接收饰的数组,则该过程在被调用时可以接收任意多个实参任意多个实参。69第第八八章章 过过 程程【例例8-18】编写一个函数过程编写一个函数过程SquareSum1,可以接收任意个实参,求任意个数的平方和可以接收任意个实参,求任意个数的平方和Function SquareSum1(ParamArray a()SquareSum1=0 For Each x In a SquareSum1=SquareSum1+x 2 Next xEnd Function 代码如下:代码如下:70第第八八章章 过过 程程Pri

37、nt SquareSum1(2,4)Print SquareSum1(2,4,6)Print SquareSum1(2,4,6,8)注意注意:用用ParamArray关键字修饰的形参只关键字修饰的形参只能是能是Variant类型,且必须作为形参表的最类型,且必须作为形参表的最后一个参数。后一个参数。ParamArray关键字不能与关键字不能与ByVal、ByRef或或Optional一起使用。一起使用。在调用程序在调用程序中中,以下打印语句都是正确的:,以下打印语句都是正确的:71第第八八章章 过过 程程8.3.5 使用对象参数使用对象参数 Visual Basic还允许用对象,即窗体或控还允

38、许用对象,即窗体或控件作为通用过程的参数。件作为通用过程的参数。如果用对象做参数,则需要在定义过程如果用对象做参数,则需要在定义过程时,使用时,使用Form、Control等关键字把形参等关键字把形参声明为对象类型。调用具有对象类型形参声明为对象类型。调用具有对象类型形参的过程时,实参应该为与形参类型相匹配的过程时,实参应该为与形参类型相匹配的对象名。的对象名。对象参数只能定义为按地址传递,因此,对象参数只能定义为按地址传递,因此,在定义过程时,不能在对象参数之前加在定义过程时,不能在对象参数之前加ByBal关键字。关键字。72第第八八章章 过过 程程1.使用窗体参数使用窗体参数 使用窗体做为

39、参数时,需要定义形参的类使用窗体做为参数时,需要定义形参的类型为型为Form,而对应的实参应为窗体名称。,而对应的实参应为窗体名称。【例【例8-19】编写一个】编写一个Sub过程过程FormSet,用于,用于将任意指定的两个窗体设置为相同大小并层将任意指定的两个窗体设置为相同大小并层叠显示。调用该过程测试其功能。叠显示。调用该过程测试其功能。设计步骤设计步骤:1)新建一个标准)新建一个标准EXE工程,使用工程,使用“工程工程|添添加窗体加窗体”命令向当前工程添加两个新的空白命令向当前工程添加两个新的空白窗体,设第一个窗体的名称为窗体,设第一个窗体的名称为Form1,新添,新添加的窗体名称为加的

40、窗体名称为Form2、Form3。73第第八八章章 过过 程程2)在)在Form1模块的通用声明段定义通用过模块的通用声明段定义通用过程程FormSet,用于将窗体对象,用于将窗体对象f2指定为与指定为与窗体对象窗体对象f1大小相同,且大小相同,且f2与与f1的显示位的显示位置错开一定距离,形成层叠的效果。为了置错开一定距离,形成层叠的效果。为了在其他窗体模块中也能够调用该过程,需在其他窗体模块中也能够调用该过程,需要用要用Public关键字定义过程关键字定义过程FormSet:Public Sub FormSet(f1 As Form,f2 As Form)f2.Left=f1.Left+5

41、00 f2.Top=f1.Top+500End Sub74第第八八章章 过过 程程3)在)在Form2的的Load事件过程中编写代码:事件过程中编写代码:Private Sub Form_Load()Call Form1.FormSet(Form1,Form2)End Sub4)在)在Form3的的Load事件过程中编写代码事件过程中编写代码:Private Sub Form_Load()Call Form1.FormSet(Form2,Form3)End Sub75第第八八章章 过过 程程5)在窗体)在窗体Form1的的Click事件过程中编写代事件过程中编写代码,显示窗体码,显示窗体For

42、m2:Private Sub Form_Click()End Sub6)在窗体)在窗体Form2的的Click事件过程中编写代事件过程中编写代码,显示窗体码,显示窗体Form3:Private Sub Form_Click()End Sub76第第八八章章 过过 程程运行效果:运行效果:运行时,单击窗体运行时,单击窗体Form1,打开窗体,打开窗体Form2,再单击窗体,再单击窗体Form2,打开窗体,打开窗体Form3,可以看出三个窗体大小相同,且层,可以看出三个窗体大小相同,且层叠显示叠显示:77第第八八章章 过过 程程2使用控件参数使用控件参数 使用控件做为参数时,需要定义形参的类使用控

43、件做为参数时,需要定义形参的类型为型为Control,而对应的实参应为控件名称。,而对应的实参应为控件名称。【例【例8-20】在许多应用程序中,当移动鼠标】在许多应用程序中,当移动鼠标到某个按钮或菜单项时,在按钮或菜单项周到某个按钮或菜单项时,在按钮或菜单项周围会自动出现一个方框,起到强调的效果。围会自动出现一个方框,起到强调的效果。本例将使用本例将使用Label控件和控件和Shape控件实现该效控件实现该效果。运行时,将鼠标移动到标签上,用方框果。运行时,将鼠标移动到标签上,用方框将标签框起来,使标签具有按钮效果。将标签框起来,使标签具有按钮效果。78第第八八章章 过过 程程设计界面设计界面

44、:Shape1Image179第第八八章章 过过 程程代码设计:代码设计:Sub s(X As Control)Shape1.Visible=True xLeft=-50 xtop=-50 xwidth=+100 xHeight=+100 Shape1.Move xLeft,xtop,xwidth,xHeightEnd Sub1)首先在窗体模块的通用声明段编写)首先在窗体模块的通用声明段编写Sub过过程程s:80第第八八章章 过过 程程2)在各标签的)在各标签的MouseMove事件过程中编写事件过程中编写相应代码,调用以上相应代码,调用以上Sub过程过程s,把标签名称,把标签名称作为实参传递

45、给形参作为实参传递给形参X,实现将方框移动到,实现将方框移动到标签上,产生按钮的效果标签上,产生按钮的效果。例如:。例如:Private Sub Label1_MouseMove(Button As Integer,Shift As Integer,X As Single,Y As Single)Call s(Label1)End Sub81第第八八章章 过过 程程3)为了在鼠标移开标签(即移到为了在鼠标移开标签(即移到Image1控控件上)时方框能够消失,可以在件上)时方框能够消失,可以在Image1控件的控件的MouseMove事件过程中隐藏事件过程中隐藏Shape1控件控件:Privat

46、e Sub Image1_MouseMove(Button As Integer,Shift As Integer,X As Single,Y As Single)Shape1.Visible=FalseEnd Sub82第第八八章章 过过 程程8.4 过程的嵌套调用过程的嵌套调用 在一个过程执行期间又调用另一个过程,在一个过程执行期间又调用另一个过程,称为过程的嵌套调用。称为过程的嵌套调用。调用过程调用过程 子过程子过程S1 子过程子过程S2 调用调用S1 调用调用S2 83第第八八章章 过过 程程【例例8-21】用用Function过程的嵌套调用求过程的嵌套调用求1!+2!+3!+20!分

47、析:分析:可以定义两个过程分别实现求阶乘可以定义两个过程分别实现求阶乘及求和,在事件过程中调用求和的子过程,及求和,在事件过程中调用求和的子过程,而在求和的子过程中再调用求阶乘的子过而在求和的子过程中再调用求阶乘的子过程。程。界面设计:界面设计:假设窗体上有一个命令按钮假设窗体上有一个命令按钮Command1,运行时通过单击,运行时通过单击Command1进行计算,计算结果直接打印在当前窗体进行计算,计算结果直接打印在当前窗体上。上。84第第八八章章 过过 程程代码设计:代码设计:1)设计一个求阶乘的函数过程)设计一个求阶乘的函数过程Fact:Function Fact(n As Intege

48、r)As Double Dim i As Integer,f As Double f=1 For i=1 To n f=f*i Next i Fact=fEnd Function85第第八八章章 过过 程程2)设计一个求)设计一个求1!+2!+3!+n!的函数过程!的函数过程Sigma,在,在Sigma过程中调用以上过程中调用以上Fact过程过程求阶乘。求阶乘。Function Sigma(n As Integer)As Double Dim i As Integer,sum As Double sum=0 For i=1 To n sum=sum+Fact(i)用用Fact(i)求求i!Ne

49、xt i Sigma=sumEnd Function86第第八八章章 过过 程程3)在命令按钮)在命令按钮Command1的的Click事件过程事件过程中调用中调用Sigma,指定参数,指定参数20求求1!+2!+3!+20!Private Sub Command1_Click()Print Sigma(20)调用调用Sigma过程求和过程求和End Sub87第第八八章章 过过 程程8.5 过程的递归调用过程的递归调用 若一个过程直接地或间接地调用自己,则若一个过程直接地或间接地调用自己,则称这个过程是递归的过程。使用递归过程解称这个过程是递归的过程。使用递归过程解决递归定义问题特别有效,所

50、谓递归定义就决递归定义问题特别有效,所谓递归定义就是用自身的结构来定义自身。例如数学上常是用自身的结构来定义自身。例如数学上常见的阶乘运算、级数运算、幂指数运算等,见的阶乘运算、级数运算、幂指数运算等,它们都可以用递归过程很容易地实现。它们都可以用递归过程很容易地实现。88第第八八章章 过过 程程【例例8-22】编写一个函数过程,用递归方编写一个函数过程,用递归方法实现求法实现求n!。分析:分析:在数学上,求在数学上,求n n!可以递归定义为:!可以递归定义为:n!=1 (n=1)n(n-1)!(n1)89第第八八章章 过过 程程Function fact(n As Long)As Long

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 初中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁