你的位置:创意公社- ideaer >> >> 程序开发 >> 详细内容 在线投稿

VB编程基础教程13–向过程传递参数

排行榜 打印 发给朋友 举报 发布者:go7131
热度1641票  浏览140次 【共0条评论】【我要评论 时间:2010年10月24日 17:45
创意公社- ideaer'_ a ]l*C Z

向过程传递参数创意公社- ideaer#ya2A7D+~a#Q
创意公社- ideaerj_ n'}#a?un
过程中的代码通常需要某些关于程序状态的信息才能完成它的工作。信息包括在调用过程时传递到过程内的变量。当将变量传递到过程时,称变量为参数。创意公社- ideaer"R(C_a fx
参数的数据类型
^B"r?,P1过程的参数被缺省为具有 variant 数据类型。不过,也可以声明参数为其它数据类型。例如,下面的函数接受一个字符串和一个整数:创意公社- ideaer _m;i$a \5w
function whatsforlunch(weekday as string, hour _
Q'e%i9X M0Bd1as integer) as string创意公社- ideaer {^$V&W&\rAkVN
   ‘根据星期几和时间,返回午餐菜单。
~:|U,Opm1   if weekday = “friday” then
HT4Fa`1      whatsforlunch = “fish”创意公社- ideaern'oH_"l MF
   else创意公社- ideaer `/w c0R![ E0W)N"M
      whatsforlunch = “chicken”
R Gq,V'Iq1   end if
\(Qp L2iwc1   if hour > 4 then whatsforlunch = “too late”
!WGx'U%W@~1end function
|x |9H![2\/i*S1详细信息 关于 visual basic 的数据类型,请参阅本章前面部分。也可以在语言参考中查找指定的数据类型。
Z;i#lfH p9D a1按值传递参数创意公社- ideaer8y)E5P `;pH
按值传递参数时,传递的只是变量的副本。如果过程改变了这个值,则所作变动只影响副本而不会影响变量本身。用 byval 关键字指出参数是按值来传递的。
:L Lb ^l*sak?P1例如:
.F8EW6g$fd0L C1sub postaccounts (byval intacctnum as integer)创意公社- ideaer\4P)z|G:J U
   .
'V/tF7u lE8w1   . ’这里放语句。创意公社- ideaer'kQ a ?L^2^B
   .创意公社- ideaer/jZ ]+i'bk1H8F
end sub
'` O"q(Z%w Q1按地址传递参数创意公社- ideaer eb;eqF
按地址传递参数使过程用变量的内存地址去访问实际变量的内容。结果,将变量传递给过程时,通过过程可永远改变变量值。按地址传递参数在 visual basic 中是缺省的。
;s/Gz p|"h9h$d7P1如果给按地址传递参数指定数据类型,就必须将这种类型的值传给参数。可以给参数传递一个表达式,而不是数据类型。visual basic 计算表达式,如果可能的话,还会按要求的类型将值传递给参数。
1uQU\,o7{*B.D7l6d;r1把变量转换成表达式的最简单的方法就是把它放在括号内。例如,为了把声明为整数的变量传递给过程,该过程以字符串为参数,则可以用下面的语句:
;FB~ F OY!y1sub callingprocedure ()
V T'KQs8DR#V1   dim intx as integer创意公社- ideaer$vS)i2RP e%~
   intx = 12 * 3创意公社- ideaertXk:io
   foo (intx)
#CIO\(t9y f"H1end sub
J5WH wf1sub foo (bar as string)创意公社- ideaer/sg#k!@$I t-M
   msgbox bar            ‘bar 的值为字符串‘ 36 ’。创意公社- ideaerZD"`#M-Xf
end sub
@9|c6q/L+\+Q.]+nn!Z1使用可选的参数
{[#wc"d`n;|s1在过程的参数列表中列入 optional 关键字,就可以指定过程的参数为可选的。如果指定了可选参数,则参数表中此参数后面的其它参数也必是可选的,并且要用 optional 关键字来声明。下面两段示例代码假定有一个窗体,其内有一命令按钮和一列表框。创意公社- ideaer.w7o wI~r
例如,这段代码提供所有可选参数:创意公社- ideaer$Bv.W'kT$xL+t
dim strname as string创意公社- ideaerz-clnH`2qdh
dim straddress as string
B CS}V5_1sub listtext(optional x as string, optional y _
XR(V?9_-s"B;PL/d)Ax1as string)创意公社- ideaer#@.u;n FDRH]*z
   list1.additem x创意公社- ideaer8V}$vwE/? }]
   list1.additem y创意公社- ideaer-z3y,U,SE;aT^`;|_T
end sub创意公社- ideaerY1e}T6l`t
private sub command1_click ()
D(~Cu/a1   strname = “yourname”
!^Mw9Y#ID%l!}1optional
%dFI dp`]Hpxf1   straddress = 12345            ’提供了两个参数。创意公社- ideaerO(l9] N0_(@,e
   call listtext (strname, straddress)
u7s7kd2^+x"K'G1end sub创意公社- ideaer)nCGr0L&H)ct
而下面的代码并未提供全部可选参数:创意公社- ideaer1dWl Qm!W8h
dim strname as string
Uv(C-M a,]-x1dim varaddress as variant创意公社- ideaer'} jm _L#k
sub listtext (x as string, optional y as variant)创意公社- ideaer3\7c4U2n*q4[S
   list1.additem x创意公社- ideaer(]vf:etF1p
   if not ismissing (y) then创意公社- ideaerv,Zi fl7q5x
      list1.additem y创意公社- ideaer3k,N"v e { dG*{
   end if
$Bl:Y'p fmH(Z1end sub创意公社- ideaerx1O2W'Qw2a
private sub command1_click ()
yg ~4yyu"xC@`*E3_1   strname = “yourname”            ‘未提供第二个参创意公社- ideaer ?u-C0qq0RK#\
                        ’数。
h}$R J%u b$NX,k1   call listtext (strname)创意公社- ideaeroC@9S F `-c
end sub
@2V0UaN-D&[I M4i1在未提供某个可选参数时,实际上将该参数作为具有 empty 值的变体来赋值。上例说明如何用 ismissing 函数测试丢失的可选参数。
%e!y\c4`cD0nN1提供可选参数的缺省值
#nO.R p^ z [z1也可以给可选参数指定缺省值。在下例中,如果未将可选参数传递到函数过程,则返回一个缺省值。
PsfXf S1sub listtext(x as string, optional y as _
0L P @*rJ I`-YWbd1integer = 12345)
CGU`W1   list1.additem x创意公社- ideaer/LB9Tt,Kft!J
   list1.additem y
lI8Hx{P*D1end sub
Wy"GI'{K)F*j1private sub command1_click ()创意公社- ideaerW.w$GF2~d
   strname = “yourname”   ‘未提供第二个参创意公社- ideaer9^ M+[ PLo6f/U
                     ’数。创意公社- ideaer0an%kE+gUkE
   call listtext (strname)   ‘添加“yourname”和
e i[-YD4I\1                        ’“12345”。
ck/\ u:wL&e WEf#Z5s1end sub创意公社- ideaer&urNUd't9L
使用不定数量的参数创意公社- ideaerC Yd.n6G
一般说来,过程调用中的参数个数应等于过程说明的参数个数。可用 paramarray 关键字指明,过程将接受任意个数的参数。于是可以这样来编写计算总和的 sum 函数:
.t!M8w.U8l b/E6X1dim x as integer创意公社- ideaeru&u5|g G
dim y as integer创意公社- ideaerK/^EQV4I
dim intsum as integer
p.{6e.f1?5f"H Q1sub sum (paramarray intnums ())
B q? xzW'r/p1   for each x in intnums创意公社- ideaer!Q [-Q}G
      y = y + x创意公社- ideaer0mn9]\C*O[X2X
   next x创意公社- ideaer x qD#|Nn X6{
   intsum = y
2\c6H(@#qkR8K1end sub创意公社- ideaerl4EHe(e)cD
private sub command1_click ()
{ pxA9K-S4M1   sum 1, 3, 5, 7, 8创意公社- ideaerD@b'w Ygdp Z
   list1.additem intsum
+B`a^*p!H1end sub
teL0_@RQ1用命名的参数创建简单语句
2}!rv5sV:M`s1对许多内建函数、语句和方法,visual basic 提供了命名参数方法来快捷传递参数值。对命名参数,通过给命名参数赋值,就可按任意次序提供任意多参数。为此,键入命名参数,其后为冒号、等号和值 (myargument := “somevalue”) ,可以按任意次序安排这些赋值,它们之间用逗号分开。注意,下例中的参数顺序和所要参数的顺序相反:
&W6dd oR.H1function listtext (strname as string, optional straddress as string)
M/m;g'G[X1   list1.additem strname
0T3f-U(B J6`S1   list2.additem straddress
/t0u Q@:n^d0DGY1end sub创意公社- ideaer y7XQ?w
private sub command1_click ()创意公社- ideaer a'N7[7Q3hq*_`
   listtext straddress:=”12345”, strname:=”your name”创意公社- ideaer/{)i;eb"R*N0U-S
end sub
'G+C8jn4?JM"Fr1如果过程有若干不必总要指定的可选参数,则上述内容更为有用。创意公社- ideaerf]+gt#T7X+G,c
确定对命名参数的支持
z1dX*Y'sN P1要确定哪一个函数、语句和方法支持命名参数,用“代码”窗口中的“autoquickinfo”功能,检查“对象浏览器”,或者参阅语言参考。使用命名参数时要注意以下几点:
c\bP#bFn4]1在 visual basic (vb) 对象库中的对象的方法不支持命名参数。而 visual basic for applications (vba) 对象库中的所有的语言关键字都支持命名的参数。
!W*`{ Gd(u&Ig1创意公社- ideaer V%UBga6B#}b
在语法中,命名参数是用粗体和斜体字表示的。所有其它参数只用斜体字表示。 创意公社- ideaer _)FV)x"v g;IE
重点 使用命名参数时不能省略所需参数的输入。可以只省略可选参数。对于 visual basic (vb) 和 visual basic for applications (vba) 对象库,“对象浏览器”对话框将可选参数用方括号 [ ] 括起来。
yqR&Vt1详细信息 请参阅语言参考中的 “byval”、”byref”、”optional” 和 “paramarray”。创意公社- ideaern*H+mFTd

1Az.qf,R1
顶:75 踩:65
对本文中的事件或人物打分:
当前平均分:-0.21 (536次打分)
对本篇资讯内容的质量打分:
当前平均分:-0.62 (461次打分)
【已经有504人表态】
100票
感动
27票
路过
90票
高兴
58票
难过
61票
搞笑
58票
愤怒
56票
无聊
54票
同情
上一篇 下一篇
发表评论
换一张

网友评论仅供网友表达个人看法,并不表明本网同意其观点或证实其描述。

查看全部回复【已有0位网友发表了看法】