1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2013-12-18,#,第,9,章,过程,子程序过程,函数过程,参数传递,可选参数与可变参数,对象作参数,9.1,子程序过程,子程序过程由,SubEnd Sub,定义,也称为,Sub,过程。,9.1.1 Sub,过程的定义,定义,Sub,过程的一般格式如下:,用上面的格式定义一个,Sub,过程如下:,StaticPublicPrivate Sub,过程名,(,参数列表,),局部变量或常量定义,语句块,Exit Sub,语句块,End Sub,Private Sub Test(),Print This is a
2、 Sub example,End Sub,Sub,过程以,Sub,开头,以,End Sub,结束,在它们之间是描述该过程操作的语句块,称为过程体或子程序体。上面定义格式中各选项的含义如下:,Static,:,指定过程中的局部变量都是静态变量,即在每次调用该过程时,局部变量的值保持不变。,Public,:,表示该,Sub,过程是公有过程,即可以在程序的任何地方调用它。,Private,:,表示该,Sub,过程是私有过程,即只能被本模块中的其他过程访问,不能被其他模块中的过程访问。,过程名:,是一个长度不超过,255,个字符的变量名,在同一个模块中,不允许变量名与过程名同名。,参数列表:,指明了在
3、调用该过程时传送给过程的参数的类型和个数,这些参数称为“形式参数”,简称“形参”。各参数之间以逗号分隔,每个参数的定义格式为:,其中,,ByVal,是可选的,如果有,ByVal,,表示该参数是“传值参数”,不加,ByVal,的参数称为“引用参数”。,ByVal,变量名,()As,数据类型,Sub,过程不能嵌套,也就是说,在,Sub,过程内不能再定义,Sub,过程或函数过程。不能用,GoTo,语句进入或跳出一个,Sub,过程,只能通过调用执行,Sub,过程,,Sub,过程的调用可以嵌套。,下面再看一个,Sub,过程的例子:,该,Sub,过程有两个形参,其中第二个形参前面有,ByVal,,表示该参
4、数是一个传值参数。,Sub Try(x As Integer,ByVal y As Integer),x=x+100,y=y*5,Print x,y,End Sub,再看一个无参的,Sub,过程:,Sub Test(),Do,Response$=InputBox$(Continue(Y or N)?),If Response$=N Or Response$=n Then End,If Response$=Y Or Response$=y Then Exit Do,Loop,End Sub,9.1.2 Sub,过程的建立,前面我们已学会如何建立事件过程,,Sub,过程不属于任何一个事件过程,因此
5、不能放在事件过程中。,Sub,过程是一个通用过程,可以在标准模块中建立,也可以在窗体模块中建立。在标准模块中建立通用过程的步骤如下:,(,1,)选择“工程”菜单中的“添加模块”命令,打开“添加模块”对话框,在该对话框中选择“新建”选项卡,然后双击“模块”图标,打开模块代码窗口。,(,2,)选择“工具”菜单中的“添加过程”命令,打开“添加过程”对话框,如,右,图所示。在“名称”框内输入要建立的过程的名字,在“类型”框内选择要建立的过程的类型:子程序过程或函数过程,在“范围”框内选择过程的适用范围。,(,3,)单击“确定”按钮,回到模块代码窗口,此时可以在,Sub,和,End Sub,之间键入程序
6、代码。,“添加过程”对话框,9.1.3 Sub,过程的调用,可以把,Sub,过程的调用当作是一句独立的调用语句,可以有两种调用形式:,或,前者用,Call,关键字,若有实参,必须用小括号括起来,无实参时小括号可省略;而后者去掉了关键字,Call,,并且实参不需要用小括号括起来。实参也称实际参数,是在过程被调用时写在过程名后面括号中的参数。且实参的数据类型必须与定义过程时的形式参数一致。它的作用是把需要实际运算的数据传递给形式参数。,如调用前面定义的,Sub,过程,Try,时,可用:,或,Call,过程名,(实参表列),过程名,实参表列,Call Try(a,b),Try,a,b,例,9.1,编
7、写一个计算矩形面积的,Sub,过程,然后调用该过程求一个矩形的面积。,程序代码如下:,Sub Area(x,y),Dim S,S=x*y,MsgBox Area is&S,End Sub,Sub Form_Click(),Dim A,B,A=InputBox(Input the length:),A=Val(A),B=InputBox(Input the Width:),B=Val(B),Call Area(A,B),或:,Area A,B,End Sub,程序运行时,单击窗体,首先出现一个输入对话框,要求输入矩形的长,假设输入,30,,确定后又出现一个输入对话框,要求输入矩形的宽,假设输入,
8、20,,确定后出现运行结果如,下,图所示。,调用,Sub,过程求矩形的面积,9.2,函数过程,函数过程由,FunctionEnd Function,定义,也称为,Function,过程。与,Sub,过程相比,,Sub,过程不直接返回值,作为独立的基本语句调用,而,Function,过程要返回一个值,通常在一个表达式中被调用。,9.2.1 Function,过程的定义,Function,过程的定义格式如下:,其中:,As,类型,可选项是,Function,过程返回的值的数据类型,可以是,Integer,、,Long,、,Single,、,Double,、,Currency,或,String,。如
9、果省略,默认为,Variant,类型。其他各选项与,Sub,过程相同。,StaticPublicPrivate Function,过程名,(,参数列表,)As,类型,局部变量或常量定义,语句块,过程名表达式,Exit Function,语句块,End Function,把某功能定义为,Sub,过程还是,Function,过程,没有严格的规定,但,Function,过程有返回值。定义,Function,过程时,要定义返回值的数据类型,同时在,Function,过程体内可以对,Function,过程名赋值,该值就是这个函数的返回值。如果在,Function,过程体内省略:,则该,Function,
10、过程返回一个默认值(,0,或空字符串)。,例如,要编写用辗转相除法求最大公约数的函数,程序如下:,过程名表达式,Function gcd(ByVal x As Integer,ByVal y As Integer)As Integer,Do While y0,r=x Mod y,x=y,y=r,Loop,gcd=x,End Function,9.2.2 Function,过程的调用,由于,Function,过程能返回一个值,因此完全可以把,Function,过程当做内部函数调用,只不过内部函数由系统提供,而,Function,过程由用户自己定义。例如,上面的,Function,过程,gcd,,
11、可以在下面的事件过程中调用。,例,9.2,调用后,例,9.2,程序的运行结果如,下,图所示。,Sub Form_Click(),Dim a As Integer,b As Integer,a=64:b=48,f=gcd(a,b),Print,最大公约数为:,;f,End Sub,调用,Function,过程,例,9.3,分别编写一个计算下列级数和的子过程和函数过程,并分别调用。,1,x,x,2,/2!,x,n,/n!,精确到,x,n,/n!,=eps),s=s+t,t=t*x/n,n=n+1,Loop,End Sub,函数过程如下:,Function sum2(x!,eps#)As Doubl
12、e,Dim n%,s#,t#,n=1:s=0:t=1,Do While(Abs(t)=eps),s=s+t,t=t*x/n,n=n+1,Loop,sum2=s,End Function,用下面的事件过程调用:,Private Sub Command1_Click(),Dim f1#,f2#,Call sum1(f1,2#,0.000001),f2=sum2(2#,0.000001),Print f1=;f1,f2=;f2,End Sub,在窗体中添加一个命令按钮,Command1,,程序运行时单击该命令按钮,则运行结果如,下,图所示。其中,f1,是调用子过程,sum1,求得的级数和,,f2,是
13、调用函数过程,sum2,求得的级数和。,子过程和函数过程的比较,9.3,参数传递,在调用一个过程时,一般主调过程与被调过程之间有数据传递,也就是要把主调过程的实参传递给被调过程的形参,完成实参与形参的结合,然后执行被调过程体。在,VB,中,实参与形参的结合有两种方法:传值(,ByVal,)和传址(,ByDef,)。,9.3.1,传值和传址,传址又称为引用,是默认的参数传递方法。区分两种传递方法是看形参前有无“,ByVal,”关键字。,传址的结合过程是:当调用一个过程时,将实参的内存地址传递给形参。因此在被调过程体中对形参的操作实际是对相应实参的操作,实参的值就会随过程体内对形参的值的改变而改变
14、传址习惯上也称为“引用”。,传值的结合过程是:当调用一个过程时,系统将实参的值复制给形参,实参与形参各自占用不同的内存单元,过程调用结束时,形参所占的内存单元也同时被释放。因此,在过程体内对形参的操作不会影响到实参。,例,9.4,传址与传值的比较。,有如下过程:,Sub Try(x As Integer,ByDef y As Integer),第二个参数中的,ByDef,关键字可以省略,Dim temp As Integer,temp=x,x=y,y=temp,Form1.Print x=;x,y=;y,End Sub,在下面的事件过程中调用上述过程:,运行程序,单击窗体,输出结果如,下,图
15、所示。由此可以看到,在过程,Try,中交换了两个形参的值,调用结束返回事件过程后,两个实参的值也被改变了。,Sub Form_Click(),Dim a As Integer,b As Integer,a=10:b=20,Print a=;a,b=;b,Try a,b,Print a=;a,b=;b,End Sub,传址调用,如果不想改变实参的值,可将过程,Try,修改如下:,仍旧用上面的,Form_Click(),事件过程去调用,则窗体上的输出结果如,下,图所示。可以看到形参的值的改变没有影响实参。,Sub Try(ByVal x As Integer,ByVal y As Integer)
16、Dim temp As Integer,temp=x,x=y,y=temp,Form1.Print x=;x,y=;y,End Sub,传值调用,我们已经知道,用,Function,过程可以通过过程名返回值,但一个,Function,过程只能返回一个值。,Sub,过程不能通过过程名返回值,但可以通过传址结合的参数返回值,并且可以返回多个值,请看下面的例子。,例,9.5,通过传址调用,Sub,过程,返回多个值。,程序如下:,Sub S(ByVal x As Integer,ByVal y As Integer,m As Integer,n As Integer),m=x+y,n=x*y,End
17、 Sub,Private Sub Form_Click(),Dim Sum As Integer,Mul As Integer,S 10,20,Sum,Mul,Print Sum,Mul,End Sub,Sub,过程,S,有,4,个参数,前两个参数用关键字,ByVal,指明是传值调用,后两个参数,m,和,n,前面没有关键字,则是默认的传址方式。在,Form_Click(),事件过程中调用,Sub,过程,S,的语句为:,则将,10,和,20,分别传值给形参,x,和,y,,将实参,Sum,和,Mul,的地址传递给形参,m,和,n,,即,m,与,Sum,占用同一段内存,,n,与,Mul,占用同一段内
18、存,因此在过程,S,中将,x+y,、,x*y,的值分别赋给,m,、,n,,也就是将这两个值分别存入了,Sum,和,Mul,所占的内存单元中。于是调用完过程,S,返回,Form_Click(),事件过程中输出,Sum,和,Mul,的值时,将输出:,S 10,20,Sum,Mul,30200,9.3.2,数组作参数传递,在,VB,中允许把数组作为实参传递给一个过程。这时,应将数组名分别放入实参表和形参表中,并略去数组的上下界,但数组名后的小括号不能省,以免与普通变量混淆。,数组只能通过传址方式进行传递,也就是说,用数组作过程参数时,可以将实参数组的全部元素传送给一个过程,而形参数组中各元素的改变将
19、被带回到实参数组。,例,9.6,编写一个,Function,过程,求数组的最大值。,Private Function FindMax(a()As Integer),Dim Start As Integer,Finish As Integer,i As Integer,Start=LBound(a),Finish=UBound(a),Max=a(Start),For i=Start To Finish,If a(i)Max Then Max=a(i),Next i,FindMax=Max,End Function,Sub Form_Click(),ReDim b(10)As Integer,Fo
20、r i=1 To 10,t=InputBox(input Integer:),b(i)=t,Next i,c=FindMax(b(),Print c,End Sub,程序中定义了一个函数过程,FindMax,,它有一个形参,即数组,a,。当在,Form_Click(),事件过程中调用函数过程,FindMax,时,将实参数组,b,作参数传递给形参数组,a,,于是,形参数组,a,与实参数组,b,共占同一段内存空间。而且因为两个数组类型相同,因此,a(i),就是,b(i),的值。接下来在函数过程,FindMax,中用,LBound,和,Ubound,函数分别求得数组,a,的下界和上界,然后对数组中元
21、素进行比较,找到数组,a,的最大值,其实也就是数组,b,中所有元素的最大值,通过函数过程,FindMax,,将此最大值返回给,Form_Click(),事件过程并输出。,有时不需要把整个数组传送给通用过程,可以只传送所需要的某个元素,只要在实参数组名后的小括号内写上要传送的元素的下标。这时,形参不需要定义成数组,只要定义成与作实参的数组元素同类型的变量即可。这种用法其实与前面介绍的传值或传址调用类似。,例,9.7,用二维数组的某个元素作实参调用一个,Sub,过程。,程序代码如下:,Dim test_array()As Integer,Static Sub Sqval(a),a=Sqr(Abs(
22、a),End Sub,Sub Form_Click(),ReDim test_array(1 To 5,1 To 3),test_array(5,3)=-25,Print test_array(5,3),Call Sqval(test_array(5,3),Print test_array(5,3),End Sub,程序中:,Call Sqval(test_array(5,3),语句把二维数组,test_array,中的元素,test_array(5,3),作为实参传递给形参,a,,可以看到形参,a,是一个变量,并且实参与形参的结合是默认的传址方式。因此在调用过程,Sqval,时改变,a,的值
23、实参,test_array(5,3),的值也随之改变。所以程序运行后,单击窗体,在窗体中显示输出结果为:,最后还要说明一点:通过过程传送参数时,实参与对应的形参的类型应当一致。如果实参是数值常数或数值表达式,而它的类型与对应的形参的类型又不匹配时,则系统会将此数值常数或数值表达式强制转换为相应形参的类型。,-25,5,9.3.3,按位置传送和指名传送,1,按位置传送,按位置传送是大多数程序设计语言在子程序调用时所使用的参数传送方式,在前面的例子中使用的都是按位置传送。,使用按位置传送时,实参的个数与形参的个数必须相等,而且实参的类型必须与相应的形参的类型相同,实参的名字与相应的形参的名字可以
24、不同。也就是说,实参必须和形参表中同一位置的形参相匹配。如下面定义的一个过程:,Sub Test(x1 As Integer,x2 As Single,x3 As String),End Sub,我们可以用下面的语句调用该过程:,不难看出,实参,a,、,b,和,ABC,分别与对应位置上的形参,x1,、,x2,和,x3,类型相同,并且实参的个数与形参的个数也相同。,在按位置传送时,实参可以是常数、合法的变量名、表达式或后面跟有左右括号的数组名。而形参表中的变量可以是除定长字符串之外的合法变量名或后面跟有左右括号的数组名。,注意:只能使用形如,Str$,或,Str As String,之类的变长字
25、符串作为形参,不能用形如,Str As String*8,之类的定长字符串作为形参,但定长字符串可以作实参传送给过程。,Call Test(a%,b!,ABC),2,指名传送,除按位置传送外,在,VB,中还提供了与,Ada,语言类似的参数传送方式,即指名参数传送方式。,所谓指名传送方式,就是显式地指出与形参结合的实参,把形参用“,:=,”与实参连接起来。指名传送方式不受参数的位置次序的影响,但要求实参与形参的名字必须相同。如建立如下的过程:,使用按位置传送时,我们可以写出调用语句如下:,Sub Test(x1 As Integer,x2 As Integer,x3 As Integer),En
26、d Sub,Test 4,6,8,如果使用指名传送方式,则下面的三个调用语句都是可以的:,并且这三个调用语句是完全等价的。,使用指名传送比使用按位置传送在书写上繁琐,但指名传送能改善过程调用的可读性,而且,当参数较多,类型又相似时,指名传送比按位置传送出错的可能性要小一些。,但应当注意的是,有些方法的调用是不能使用指名传送的。使用时可查阅相关的帮助信息。,Test x1:=4,x2:=6,x3:=8,Test x2:=6,x1:=4,x3:=8,Test x3:=8,x2:=6,x1:=4,9.4,可选参数与可变参数,在,VB,中调用一个过程时,还可以向过程传送可选的参数或者任意数量的参数,即
27、可选参数和可变参数。,9.4.1,可选参数,在前面的例子中,如果一个过程有,3,个形参,则调用时必须按相同的顺序和类型提供,3,个实参。在,VB,中,还可以指定一个或多个参数作为可选参数,在调用时,可以不必给可选参数传递实参。,为了定义带可选参数的过程,需要在可选参数名前加“,Optional,”关键字,并在过程体中通过,IsMissing,函数测试调用时是否给可选参数传递实参。例如:,Sub Sum(a As Integer,b As Integer,Optional c),n=a+b,If Not IsMissing(c)Then,n=n+c,End If,Print n,End Sub,
28、上述过程中有,3,个参数,前两个参数与前面例子中的参数相同,最后一个参数没有指定类型,默认其类型为,Variant,,它前面有一个关键字“,Optional,”,表示它是一个可选参数。在过程体中,首先计算前两个参数的和,并把结果赋值给变量,n,,然后用,IsMissing,函数测试第三个参数,c,是否存在,如果存在,则把第三个参数,c,的值也加到变量,n,中,最后将,n,的值输出。,在调用上面的,Sum,过程时,可以传递两个实参,求出两个数的和,也可以传递三个实参,求出三个数的和。如用下面的事件过程调用上述的,Sum,过程:,输出结果为:,30,Private Sub Form_Click()
29、Sum 10,20,End Sub,也可以用下面的过程调用:,输出结果为:,60,上面的,Sum,过程只有一个可选参数,我们可以根据实际需要,用同样的方法设置两个或多个可选参数。但要注意:可选参数必须放在参数表列的最后,并且必须是,Variant,类型。,Private Sub Form_Click(),Sum 10,20,30,End Sub,9.4.2,可变参数,所谓可变参数,就是在定义过程时参数的个数是可变的,这在处理一些问题时是非常有用的。,这里的“数组名,(),”是一个形参,只有名字和括号,没有上、下界,其类型默认为,Variant,类型。,在,VB,中,建立可变参数过程可用如下方
30、式定义:,Sub,过程名(,ParamArray,数组名,(),),过程体,End Sub,前面定义的,Sum,过程可以求两个或三个数的和。如果想求任意多个数的和,可定义一个可变参数过程,Sum,如下,:,可以用任意多个实参调用上面的,Sum,过程。如编写下面的事件过程:,用该事件过程调用上面的,Sum,过程,输出结果为:,15,Sub Sum(ParamArray Num(),n,0,For Each x In Num,n,n,x,Next x,Print n,End Sub,Private Sub Form_Click(),Sum 1,2,3,4,5,End Sub,由于可变参数过程中的形
31、参是,Variant,类型,因此我们可以把任何类型的参传送给该过程。看下面这个事件过程:,调用上面的,Sum,过程,输出结果为:,28,Private Sub Form_Click(),Dim a As Integer,b As Long,c As Variant,d As Integer,a=6:b=8:c=12:d=2,Sum a,b,c,d,End Sub,9.5,对象作参数,除了可以用变量作通用过程的形式参数外,在,VB,中还允许用对象(即窗体或控件)作通用过程的参数。,用窗体或控件作形参时,过程的定义格式与用变量作参数相同。只不过是把形参表中的对象参数的类型定义为“,Control,
32、或“,Form,”。但要注意,在调用含有对象参数的过程时,对象参数只能用传地址方式传送。也就是说,在定义过程时不能在对象参数前加关键字,ByVal,。,9.5.1,窗体参数,假设我们要设计一个程序,在这个程序中含有多个窗体(关于多窗体的程序设计,我们将在后面章节介绍),而且要求在运行程序时,这些窗体的位置、大小都相同。我们知道,窗体的位置和大小可以通过窗体的,Left,、,Top,、,Width,及,Height,四个属性来设置。假定这些窗体的名字分别为,Form1,、,Form2,、,Form3,,我们可以写出下面的程序段:,Form1.Left=2000,Form1.Top=3000,F
33、orm1.Width=5000,Form1.Height=3000,Form2.Left=2000,Form2.Top=3000,Form2.Width=5000,Form2.Height=3000,Form3.Left=2000,Form3.Top=3000,Form3.Width=5000,Form3.Height=3000,每个窗体都要用四个语句来确定其大小和位置。这四个语句除窗体名不同外,其他都是一样的。因此,为了避免这些语句的重复书写,我们可以用窗体作参数,编写出如下的通用过程:,该过程的形参即为一个窗体类型。在调用时,就可以用窗体作实参。例如可以用如下的语句调用上述过程:,则将按过
34、程中给出的各属性值设置窗体,Form1,的大小和位置。,Sub FormSet(FormNum As Form),FormNum.Left=2000,FormNum.Top=3000,FormNum.Width=5000,FormNum.Height=3000,End Sub,FormSet Form1,为了调用上面的通用过程,FormSet,,可以选择“工程”菜单中的“添加窗体”命令建立多个窗体,现假设我们建立,4,个,即,Form1,、,Form2,、,Form3,和,Form4,。在默认情况下,第一个建立的窗体(这里假设是,Form1,)是启动窗体。我们对,Form1,编写如下的事件过程
35、Private Sub Form_Load(),FormSet Form1,FormSet Form2,FormSet Form3,FormSet Form4,End Sub,然后对,4,个窗体分别编写如下的,Click,事件过程:,Private Sub Form_Click(),Form1.Hide ,窗体,Form1,隐藏,Form2.Show ,显示窗体,Form2,End Sub,Private Sub Form_Click(),Form2.Hide,Form3.Show,End Sub,Private Sub Form_Click(),Form3.Hide,Form4.Show
36、End Sub,Private Sub Form_Click(),Form4.Hide,Form1.Show,End Sub,于是,在运行程序时,首先显示,Form1,,单击该窗体后,,Form1,隐藏,显示,Form2,;单击,Form2,窗体后,,Form2,隐藏,,Form3,显示出来,每个窗体显示的大小和位置均相同。,9.5.2,控件参数,和窗体参数一样,控件也可以作通用过程的参数,即可以在一个通用过程中设置相同性质的控件所需要的属性,然后用不同的控件作实参调用该过程。请看下面这个例子。,例,9.8,在窗体上建立两个文本框,然后编写一个通用过程,用控件作参数,用来设置文本框中显示的字
37、体属性。,通用过程如下:,Sub FontSet(Ctrl1 As Control,Ctrl2 As Control),Ctrl1.FontSize=18,Ctrl1.FontName=,“幼圆”,Ctrl1.FontItalic=True,Ctrl1.FontBold=True,Ctrl1.FontUnderline=False,Ctrl2.FontSize=26,Ctrl2.FontName=,“隶书”,Ctrl2.FontItalic=False,Ctrl2.FontUnderline=True,End Sub,该过程有两个参数,其类型均为,Control,,即控件参数。在该过程中通过一
38、系列语句设置了控件上所显示的文字的属性。,为了调用该过程,我们在窗体上建立两个文本框,然后编写如下的事件过程:,Private Sub Form_Load(),Text1.Text=,“欢迎来到”,Text2.Text=,“新乡师专计科系”,End Sub,Private Sub Form_Click(),FontSet Text1,Text2,End Sub,程序运行后,窗体显示如,左,图所示,然后单击窗体,运行结果如,右,图所示。,对象参数示例,对象作参数改变文本框字体,在使用控件作参数时,由于不同的控件所具有的属性也不一样,因此,在用指定的控件作实参调用通用过程时,如果通用过程中的实参控
39、件不具有某个语句中的属性,则会发生错误。如上例中,如果用文本框控件作实参调用,程序可顺利通过,但如果用其他控件(如图片框)作实参调用,即编写如下事件过程:,则会出现错误,因为图片框控件没有,Text,属性。,Private Sub Picture1_Click(),FontSet Picture1,Picture2,End Sub,这就是说,在用控件作参数时,必须考虑到作为实参的控件是否具有通用过程中所列的控件的属性。为此,,VB,专门提供了一个,TypeOf,语句,用来限定控件参数的类型。,TypeOf,语句的格式为:,其中:控件名称指的是控件参数(也就是形参)的名字,控件类型是代表不同控件
40、的关键字,这些关键字有:,CheckBox,(复选框)、,ComboBox,(组合框)、,CommandButton,(命令按钮)、,DirListBox,(目录列表框)、,DriveListBox,(驱动器列表框)、,FileListBox,(文件列表框)、,Frame,(框架)、,HScrollBar,(水平滚动条)、,Label,(标签)、,ListBox,(列表框、,Menu,(菜单)、,OptionButton,(单选按钮)、,PictureBox,(图片框)、,TextBox,(文本框)、,Timer,(计时器)及,VScrollBar,(垂直滚动条)。,If|ElseIf Typ
41、eOf,控件名称,Is,控件类型,TypeOf,语句可放在通用过程中,用来限定控件参数的类型。如上面的例子中可加上,TypeOf,测试,将上面的例子修改如下:,例,9.9,Sub FontSet(Ctrl1 As Control,Ctrl2 As Control),Ctrl1.FontSize=18,Ctrl1.FontName=,“幼圆”,Ctrl1.FontItalic=True,Ctrl1.FontBold=True,Ctrl1.FontUnderline=False,If TypeOf Ctrl1 Is TextBox Then,Ctrl1.Text=,“欢迎来到”,End If,由于
42、在过程中加上了,TypeOf,测试,因此,只有用文本框(,TextBox,)作实参调用该过程时,才会把字符串赋给相应的,Text,属性。如果用没有,Text,属性的控件作实参调用该过程,也不会产生错误。,Ctrl2.FontSize=26,Ctrl2.FontName=,“隶书”,Ctrl2.FontItalic=False,Ctrl2.FontUnderline=True,If TypeOf Ctrl2 Is TextBox Then,Ctrl2.Text=,“新乡师专计科系”,End If,End Sub,为了验证,TypeOf,语句,我们在窗体上建立一个文本框和一个图片框,然后编写如下的事件过程:,运行该程序,运行结果如,下,图所示。,Private Sub Form_Click(),FontSet Text1,Picture1,End Sub,TypeOf,语句示例,
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818