




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第四章VB程序設(shè)計(jì)第四章VB程序設(shè)計(jì)在設(shè)計(jì)一個(gè)規(guī)模較大、功能較復(fù)雜的程序時(shí),需要按功能將程序分解成若干個(gè)相互獨(dú)立的部件,VB稱這些部件為過(guò)程。在程序編寫(xiě)時(shí),分別對(duì)每個(gè)“過(guò)程”編寫(xiě)程序,可以簡(jiǎn)化程序設(shè)計(jì)任務(wù)。本章主要對(duì)工程、模塊和過(guò)程進(jìn)行介紹。4.1文件類型VB應(yīng)用程序由擴(kuò)展名為.vbp、.frm、.frx、.bas、.cls等幾種類型的文件組成。窗體文件(.frm)包含窗體、控件的描述和屬性設(shè)置,也包含窗體級(jí)的常數(shù)、變量、外部過(guò)程的聲明,以及事件過(guò)程和一般過(guò)程。如果程序沒(méi)有frm窗體文件,則表示沒(méi)有用戶界面。窗體的二進(jìn)制數(shù)據(jù)文件(.frx)含有窗體上控件的二進(jìn)制屬性數(shù)據(jù)。這些文件是在創(chuàng)建窗體時(shí)自動(dòng)產(chǎn)生的。4.1文件類型標(biāo)準(zhǔn)模塊文件(.bas)用于存放幾個(gè)窗體中都需要用的公共代碼,包含常數(shù)、類型、變量和過(guò)程的聲明,以及過(guò)程代碼。類模塊文件(.cls)用于建立新對(duì)象,這些新對(duì)象可以包含自定義的屬性和方法。類模塊即包含代碼又包含數(shù)據(jù),可被應(yīng)用程序內(nèi)的過(guò)程調(diào)用。/htbf/4.1文件類型工程文件(.vbp)工程文件包含組成應(yīng)用程序的所有窗體文件(.frm)、模塊文件(.bas)和其它文件,也包含環(huán)境設(shè)置選項(xiàng)方面的信息。工程的操作:打開(kāi)和保存工程:通過(guò)“文件”菜單進(jìn)行打開(kāi)和保存工作設(shè)置工程屬性:“工程”菜單,“工程屬性”對(duì)話框操作添加工程:工具欄或“文件”菜單添加已有工程或新建工程添加多個(gè)工程可組成工程組刪除工程:“工程資源管理器”中通過(guò)右鍵快捷菜單向工程中添加和刪除文件:工具欄或“工程”菜單4.2過(guò)程將較為復(fù)雜的程序分割成較小的邏輯部件,這些部件稱為過(guò)程。每個(gè)過(guò)程為一段程序,一個(gè)過(guò)程可以被另一個(gè)過(guò)程調(diào)用。多個(gè)過(guò)程構(gòu)成一個(gè)完整、復(fù)雜的應(yīng)用程序。將應(yīng)用程序分解成過(guò)程進(jìn)行分別調(diào)試,可極大地簡(jiǎn)化程序設(shè)計(jì)任務(wù)。4.2過(guò)程應(yīng)用程序工程文件窗體文件多個(gè)過(guò)程標(biāo)準(zhǔn)模塊文件多個(gè)過(guò)程類模塊文件多個(gè)過(guò)程工程文件應(yīng)用程序的組成:……………4.2過(guò)程過(guò)程的分類:子程序過(guò)程(SubProcedure)子程序過(guò)程沒(méi)有返回值函數(shù)過(guò)程(FunctionProcedure)函數(shù)過(guò)程具有返回值,如a=sin(x)屬性過(guò)程(PropertyProcedure)屬性過(guò)程可以返回和設(shè)置窗體、標(biāo)準(zhǔn)模塊和類模塊,也可以設(shè)置對(duì)象的屬性。VB的所有可執(zhí)行代碼必須屬于某個(gè)過(guò)程。過(guò)程的定義是平行的,不能在一個(gè)過(guò)程中定義其它過(guò)程。4.2.1Sub過(guò)程(子程序過(guò)程)Sub過(guò)程可以放在標(biāo)準(zhǔn)模塊和窗體模塊中。VB中有兩種Sub過(guò)程:事件過(guò)程通過(guò)過(guò)程事件過(guò)程VB是事件驅(qū)動(dòng)的,為一個(gè)事件所編寫(xiě)的程序代碼,稱為事件過(guò)程。當(dāng)VB對(duì)象中的某個(gè)事件發(fā)生時(shí),自動(dòng)調(diào)用相應(yīng)的事件過(guò)程。事件過(guò)程分為窗體事件過(guò)程和控件事件過(guò)程。4.2.1Sub過(guò)程(子程序過(guò)程)(1)窗體事件過(guò)程的語(yǔ)法:PrivateSubForm_事件名([參數(shù)列表])[局部變量和常數(shù)聲明]語(yǔ)句塊EndSub例如:PrivateSubForm_Click()frmText.ShowHideEndSub注意:不管窗體的名稱(Name)屬性是什么,在事件過(guò)程中只能使用“Form_事件名”在程序代碼中對(duì)窗體的引用須要使用窗體的名稱屬性在程序有多個(gè)窗體時(shí),如何對(duì)不同窗體的窗體事件編程?將要進(jìn)行編程的窗體放在屏幕最前端(或在工程資源管理器中選中窗體),再點(diǎn)擊工程資源管理器中的“查看代碼”按鈕;在代碼窗口的標(biāo)題欄中顯示代碼對(duì)應(yīng)的窗體。4.2.1Sub過(guò)程(子程序過(guò)程)(2)控件事件過(guò)程的語(yǔ)法:PrivateSub控件名_事件名([參數(shù)列表])[局部變量和常數(shù)聲明]語(yǔ)句塊EndSub例如:PrivateSubCommand1_Click()Text2=Text1*Text1*3.14EndSub4.2.1Sub過(guò)程(子程序過(guò)程)(3)事件過(guò)程的創(chuàng)建方法:在設(shè)計(jì)的窗體上雙擊窗體或控件,打開(kāi)“代碼編輯器”窗口,并會(huì)出現(xiàn)該窗體或控件的默認(rèn)過(guò)程代碼。單擊工程資源管理器窗口的“查看代碼”按鈕,在對(duì)象列表框選擇對(duì)象,在“過(guò)程列表框”選擇事件過(guò)程。根據(jù)語(yǔ)法要求,自己編寫(xiě)事件過(guò)程。4.2.1Sub過(guò)程(子程序過(guò)程)通用過(guò)程當(dāng)幾個(gè)不同的事件過(guò)程需要執(zhí)行同樣的動(dòng)作時(shí),為了不重復(fù)編寫(xiě)代碼,可以采用通用過(guò)程來(lái)實(shí)現(xiàn)。要運(yùn)行通用過(guò)程中的代碼,需要在事件過(guò)程對(duì)通用過(guò)程進(jìn)行調(diào)用。通用過(guò)程可以保存在窗體模塊(.frm)和標(biāo)準(zhǔn)模塊(.bas)兩種模塊中。在VB中,事件過(guò)程是必要的,但通用過(guò)程不是必要的,是為了程序員方便而單獨(dú)建立的。4.2.1Sub過(guò)程(子程序過(guò)程)(1)通用過(guò)程的語(yǔ)法:Private和Public:用來(lái)聲明該Sub過(guò)程是局部的(Private),還是全局的(Public),系統(tǒng)默認(rèn)值為PublicStatic:表示局部靜態(tài)變量?!办o態(tài)”是指在過(guò)程運(yùn)行結(jié)束后仍保留Sub過(guò)程的變量值。過(guò)程名:根據(jù)該通用過(guò)程的功能,程序員自己定義的名字。與變量的命名規(guī)則相同,在同一模塊中過(guò)程名不能重名。[Private|Public][Static]Sub過(guò)程名([參數(shù)列表])[局部變量和常數(shù)聲明]語(yǔ)句塊 [ExitSub]
語(yǔ)句塊EndSub4.2.1Sub過(guò)程(子程序過(guò)程)(1)通用過(guò)程的語(yǔ)法:局部變量和常數(shù)聲明:用來(lái)聲明過(guò)程中定義的變量和常數(shù),可用Dim等語(yǔ)句聲明。ExitSub:使程序立即從一個(gè)Sub過(guò)程中退出,一般放在分支結(jié)構(gòu)代碼中。語(yǔ)句塊:過(guò)程中執(zhí)行的操作,稱為子程序或過(guò)程體。EndSub:用于結(jié)束本Sub過(guò)程。注意:ExitSub與EndSub是結(jié)束本Sub過(guò)程,不是結(jié)束應(yīng)用程序的運(yùn)行[Private|Public][Static]Sub過(guò)程名([參數(shù)列表])[局部變量和常數(shù)聲明]
語(yǔ)句塊
[ExitSub]
語(yǔ)句塊EndSub4.2.1Sub過(guò)程(子程序過(guò)程)參數(shù)列表:類似于變量的聲明,列出從調(diào)用過(guò)程傳遞來(lái)的函數(shù)值,稱為形式參數(shù)(簡(jiǎn)稱形參),多個(gè)形參間用“,”隔開(kāi)。形參語(yǔ)法:[ByVal|ByRef]變量名[()][As數(shù)據(jù)類型]ByVal:表示該參數(shù)按值傳遞ByRef:表示該參數(shù)按地址傳遞(默認(rèn)值)[Private|Public][Static]Sub過(guò)程名([參數(shù)列表])[局部變量和常數(shù)聲明]語(yǔ)句塊 [ExitSub]
語(yǔ)句塊EndSub注意:即使Sub過(guò)程中的參數(shù)列表為空,過(guò)程名后的括號(hào)也不能省略【例Ex_Telephone】PrivateSubForm_Load()DimiAsIntegerFori=1To9LoadCommand1(i)Command1(i).Visible=TrueCommand1(i).Caption=iCommand1(i).Left=Command1(0).Left+800*iIfi>4ThenCommand1(i).Top=Command1(0).Top+800Command1(i).Left=Command1(0).Left+800*(i-5)EndIfNextiEndSubPrivateSubCommand1_Click(IndexAsInteger)Text1.Text=Text1.Text&Command1(Index).CaptionEndSub4.2.1Sub過(guò)程(子程序過(guò)程)PublicSubWarning(ByvalfAsinteger)……EndSub[Private|Public][Static]Sub過(guò)程名([參數(shù)列表])[局部變量和常數(shù)聲明]語(yǔ)句塊 [ExitSub]
語(yǔ)句塊EndSubPrivateSubWarning(fAsinteger)……EndSub例如:注意:Sub過(guò)程不能嵌套定義PublicSubWarning(ByvalfAsinteger)
PrivateSubWelcome() ……EndSub
EndSub4.2.1Sub過(guò)程(子程序過(guò)程)(2)通用過(guò)程的創(chuàng)建方法:方法一:打開(kāi)“代碼編輯器”窗口后,點(diǎn)擊“工具”菜單的“添加過(guò)程”命令方法二:在“代碼編輯器”窗口中手動(dòng)創(chuàng)建4.2.2Function過(guò)程VB系統(tǒng)提供了諸多內(nèi)部函數(shù),如sin()、Date()、Left()等等。用戶可以利用Function過(guò)程編寫(xiě)自己的函數(shù)過(guò)程。[Private|Public][Static]Function函數(shù)名([參數(shù)列表])[As數(shù)據(jù)類型][局部變量和常數(shù)聲明]語(yǔ)句塊
[函數(shù)名=表達(dá)式]
[ExitFunction]
語(yǔ)句塊 [函數(shù)名=表達(dá)式]EndFunction注意:與Sub過(guò)程一樣,F(xiàn)unction過(guò)程也是一個(gè)獨(dú)立的過(guò)程;與Sub過(guò)程不同的是,F(xiàn)unction過(guò)程可以返回一個(gè)值到調(diào)用的過(guò)程[Private|Public][Static]Sub過(guò)程名([參數(shù)列表])[局部變量和常數(shù)聲明]語(yǔ)句塊 [ExitSub]
語(yǔ)句塊EndSub4.2.2Function過(guò)程[Private|Public][Static]Function函數(shù)名([參數(shù)列表])[As數(shù)據(jù)類型][局部變量和常數(shù)聲明]語(yǔ)句塊 [函數(shù)名=表達(dá)式] [ExitFunction]
語(yǔ)句塊
[函數(shù)名=表達(dá)式]EndFunctionAs數(shù)據(jù)類型:函數(shù)返回值的數(shù)據(jù)類型,例如sin()函數(shù)的返回值為Double型。若省略“As子句”,默認(rèn)類型為Variant型。語(yǔ)句塊:描述過(guò)程的操作,稱為子函數(shù)體或函數(shù)體。函數(shù)名=表達(dá)式:在函數(shù)體中用該語(yǔ)句給函數(shù)賦值。如果在Function過(guò)程中省略該語(yǔ)句,則返回值為數(shù)據(jù)類型的默認(rèn)值。例如,數(shù)值函數(shù)返回0;字符函數(shù)返回空字符串。4.2.2Function過(guò)程[Private|Public][Static]Function函數(shù)名([參數(shù)列表])[As數(shù)據(jù)類型][局部變量和常數(shù)聲明]語(yǔ)句塊 [函數(shù)名=表達(dá)式]
[ExitFunction]
語(yǔ)句塊 [函數(shù)名=表達(dá)式]EndFunctionExitFunction語(yǔ)句:提前退出Function過(guò)程。在退出函數(shù)過(guò)程之前,必須保證為函數(shù)賦值,否則出錯(cuò)。4.2.2Function過(guò)程Function過(guò)程實(shí)例:計(jì)算直角三角形的斜邊長(zhǎng)度
FunctionHypotenuse(AAsInteger,BAsInteger)AsInteger Hypotenuse=Sqr(A^2+B^2)EndFunction實(shí)例中:A、B為兩個(gè)整型的形式參數(shù)Hypotenuse函數(shù)的返回值為一個(gè)整型數(shù)函數(shù)體為賦值語(yǔ)句,計(jì)算兩個(gè)形參平方和的平方根4.3過(guò)程的調(diào)用PrivateSubCommand1_Click()DimYAsDouble,FAsDoubleF=Sin(10)
Y=Sin(Val(Text1.Text))Text2.Text=YEndSub語(yǔ)句1語(yǔ)句2過(guò)程1調(diào)用語(yǔ)句語(yǔ)句3語(yǔ)句4語(yǔ)句1語(yǔ)句2過(guò)程2調(diào)用語(yǔ)句語(yǔ)句3End過(guò)程1語(yǔ)句1語(yǔ)句2語(yǔ)句3End過(guò)程2事件過(guò)程過(guò)程1代碼過(guò)程2代碼過(guò)程調(diào)用的程序執(zhí)行順序:4.3.1調(diào)用Sub事件過(guò)程調(diào)用Sub過(guò)程是一個(gè)獨(dú)立的語(yǔ)句。Sub事件過(guò)程可由事件自動(dòng)調(diào)用,或在同一模塊中的其它過(guò)程中使用調(diào)用語(yǔ)句調(diào)用。調(diào)用Sub過(guò)程的方法: 1.使用Call語(yǔ)句
語(yǔ)法:Call過(guò)程名[(參數(shù)列表)] 2.直接使用過(guò)程名
語(yǔ)法:過(guò)程名[參數(shù)列表]參數(shù)列表:在調(diào)用語(yǔ)句中的參數(shù)稱為實(shí)在參數(shù)(簡(jiǎn)稱實(shí)參)。實(shí)參可以是變量、常數(shù)、數(shù)據(jù)和表達(dá)式。使用Call語(yǔ)句調(diào)用時(shí),參數(shù)必須在括號(hào)內(nèi);沒(méi)有參數(shù)時(shí),括號(hào)可省略。用過(guò)程名調(diào)用,沒(méi)有參數(shù)時(shí)必須省略參數(shù)兩邊的括號(hào)執(zhí)行調(diào)用語(yǔ)句時(shí),VB將控制傳遞給被調(diào)用的Sub過(guò)程。4.3.1調(diào)用Sub事件過(guò)程PrivateSubtxtInput_LostFocus()IfIsNumeric(txtInput)=TrueThen
MsgBox"輸入的是數(shù)值",vbOKOnly,"輸入"Else
MsgBox"輸入的是文字",vbOKOnly,"輸入"EndIfEndSubPrivateSubcmdCheck_Click()CalltxtInput_LostFocusEndSubPrivateSubcmdEnd_Click()EndEndSub【例Ex_CheckN1】4.3.2調(diào)用Sub通用過(guò)程SubWarning()IfIsNumeric(txtInput)=TrueThenMsgBox"輸入的是數(shù)值",vbOKOnly,"輸入"ElseMsgBox"輸入的是文字",vbOKOnly,"輸入"EndIfEndSubPrivateSubcmdCheck_Click()
CallWarningEndSubPrivateSubtxtInput_LostFocus()
WarningEndSub【例Ex_CheckN2】注意:VB程序是事件驅(qū)動(dòng)的,Sub通用過(guò)程只有在被其它事件過(guò)程直接或間接調(diào)用時(shí)才會(huì)被執(zhí)行,否則不會(huì)被執(zhí)行。4.3.3調(diào)用Function過(guò)程調(diào)用函數(shù)Function過(guò)程的方法與調(diào)用VB內(nèi)部函數(shù)方法一樣,在語(yǔ)句中直接使用函數(shù)名,F(xiàn)unction過(guò)程可以返回一個(gè)值到調(diào)用的過(guò)程。例如:FunctionHypotenuse(AAsInteger,BAsInteger)AsInteger Hypotenuse=Sqr(A^2+B^2)EndFunction
PrivateSubForm_Click() Print10*Hypotenuse(3,4) X=Hypotenuse(3,4) IfHypotenuse(3,4)=10ThenPrint“Error” EndSub4.3.3調(diào)用Function過(guò)程采用調(diào)用Sub過(guò)程的語(yǔ)法也能調(diào)用Function過(guò)程,當(dāng)用這種方法調(diào)用過(guò)程時(shí),放棄Function過(guò)程的返回值。。調(diào)用Sub過(guò)程的方法: 1.使用Call語(yǔ)句
語(yǔ)法:Call過(guò)程名[(參數(shù)列表)] 2.直接使用過(guò)程名
語(yǔ)法:過(guò)程名[參數(shù)列表]例如:P=MsgBox(“輸入的是數(shù)值”,vbOKOnly,“輸入")MsgBox“輸入的是數(shù)值”,vbOKOnly,“輸入”FunctionHypotenuse(AAsInteger,BAsInteger)AsInteger Hypotenuse=Sqr(A^2+B^2)EndFunction
PrivateSubForm_Click() Print10*Hypotenuse(3,4) X=Hypotenuse(3,4) IfHypotenuse(3,4)=10ThenPrint“Error” EndSub4.4參數(shù)的傳遞在調(diào)用一個(gè)有參數(shù)的過(guò)程時(shí),參數(shù)是在本過(guò)程有效的局部變量,通過(guò)“形參和實(shí)參結(jié)合”傳遞信息。實(shí)現(xiàn)調(diào)用過(guò)程的實(shí)參與被調(diào)用過(guò)程的形參之間的數(shù)據(jù)傳遞。數(shù)據(jù)有按值傳遞和按地址傳遞兩種方式。形參:在被調(diào)用過(guò)程中的參數(shù)是形參。實(shí)參:是在主調(diào)過(guò)程中的參數(shù)。4.4.1形參和實(shí)參語(yǔ)句1語(yǔ)句2過(guò)程1調(diào)用語(yǔ)句語(yǔ)句3語(yǔ)句4語(yǔ)句1語(yǔ)句2語(yǔ)句3End過(guò)程14.4.1形參和實(shí)參在過(guò)程定義語(yǔ)句中的參數(shù)列表為形參列表,在過(guò)程被調(diào)用之前,形參未被分配內(nèi)存,只是說(shuō)明形參的類型和在過(guò)程中的作用在過(guò)程調(diào)用語(yǔ)句中的參數(shù)列表為實(shí)參列表,在過(guò)程調(diào)用時(shí)實(shí)參將數(shù)據(jù)傳遞給形參例如:FunctionHypotenuse(AAsInteger,BAsInteger)AsInteger Hypotenuse=Sqr(A^2+B^2)EndFunction
PrivateSubForm_Click() DimxAsInteger,yAsInteger,CAsinteger x=Val(Text1):y=Val(Text2) C=Hypotenuse(x,y) EndSub4.4.1形參和實(shí)參形參列表和實(shí)參列表的對(duì)應(yīng)變量名可以不同。實(shí)參與形參的個(gè)數(shù)、順序和數(shù)據(jù)類型必須相同。形參與實(shí)參的數(shù)據(jù)傳遞是按位置結(jié)合的,即第1個(gè)實(shí)參與第1個(gè)形參結(jié)合,第2個(gè)實(shí)參與第2個(gè)形參結(jié)合,依此類推。形參與實(shí)參必須是一一對(duì)應(yīng)的關(guān)系,否則編譯出錯(cuò)。例如:FunctionHypotenuse(AAsInteger,BAsInteger)AsInteger Hypotenuse=Sqr(A^2+B^2)EndFunction
PrivateSubForm_Click() DimxAsInteger,yAsInteger,CAsinteger x=Val(Text1):y=Val(Text2) C=Hypotenuse(x,y) EndSubC=Hypotenuse(x):D=Hypotenuse(x,y,10)4.4.1形參和實(shí)參例如:FunctionHypotenuse(AAsInteger,B)AsInteger Hypotenuse=Sqr(A^2+B^2) EndFunction
PrivateSubForm_Click() DimxAsSingle,yAsSingle,CAsinteger x=10.5:y=5.8
C=Hypotenuse(10.5,5.8) C=Hypotenuse(x,y) EndSub如果沒(méi)有聲明形參的數(shù)據(jù)類型,則默認(rèn)為Variant型數(shù)據(jù)。對(duì)于實(shí)參數(shù)據(jù)類型那個(gè)與形參不一致時(shí),VB會(huì)先將實(shí)參進(jìn)行數(shù)據(jù)轉(zhuǎn)換,然后將轉(zhuǎn)換值傳遞給形參。注意:這種數(shù)據(jù)轉(zhuǎn)換只適用于常量的轉(zhuǎn)換。4.4.1形參和實(shí)參形參可以使用可選參數(shù),在參數(shù)列表中使用Optional關(guān)鍵字。當(dāng)使用可選參數(shù)后,形參與實(shí)參不必一一對(duì)應(yīng),在實(shí)參列表中缺省的參數(shù)取值為該數(shù)據(jù)類型的默認(rèn)值。形參與實(shí)參是相對(duì)的概念。例如:FunctionHypotenuse(OptionalAAsInteger,OptionalBAsInteger)AsInteger
y=Sin(A)
Hypotenuse=Sqr(A^2+B^2) EndFunction
PrivateSubForm_Click() DimxAsInteger,yAsInteger,CAsinteger x=Val(Text1):y=Val(Text2) C=Hypotenuse(x,y) EndSubC=Hypotenuse(x):C=Hypotenuse(,x)4.4.2參數(shù)按值傳遞和按地址傳遞在VB程序進(jìn)行過(guò)程調(diào)用時(shí),參數(shù)的傳遞有按值傳遞(PassedByValue)和按地址傳遞(PassedByReference)兩種方式。1按值傳遞參數(shù)參數(shù)按值傳遞使用ByVal關(guān)鍵字。例如:PublicSubWarning(ByvalfAsinteger)……EndSub4.4.2參數(shù)按值傳遞和按地址傳遞1按值傳遞參數(shù)按值傳遞參數(shù)時(shí),VB給傳遞的形參分配一個(gè)臨時(shí)的內(nèi)存單元,將實(shí)參的值傳遞到這個(gè)臨時(shí)單元。實(shí)參向形參傳遞是單向的。如果在被調(diào)用過(guò)程中改變了形參值,不會(huì)影響實(shí)參變量本身。當(dāng)被調(diào)用過(guò)程結(jié)束返回主調(diào)過(guò)程時(shí),VB將釋放形參的臨時(shí)存儲(chǔ)單元。4.4.2參數(shù)按值傳遞和按地址傳遞PrivateSubcmdStart_Click()Dima,b,cAsIntegera=Val(txtA.Text)b=Val(txtB.Text)txtMax=Max(a,b)txtResultA.Text=atxtResultB.Text=bEndSubPrivateFunctionMax(ByValxAsInteger,ByValyAsInteger)DimzAsIntegerIfx<yThenz=x:x=y:y=zEndIfMax=xtxtX.Text=x:txtY.Text=yEndFunction【例Ex_Max】4.4.2參數(shù)按值傳遞和按地址傳遞2按地址傳遞參數(shù)定義按地址傳遞參數(shù)可使用ByRef關(guān)鍵字,或不使用關(guān)鍵字。例如:PublicSubWarning(ByReffAsinteger)……EndSub
PublicSubWarning(fAsinteger)……EndSub4.4.2參數(shù)按值傳遞和按地址傳遞2按地址傳遞參數(shù)按地址傳遞參數(shù),是指把形參變量的內(nèi)存地址傳遞給被調(diào)用的過(guò)程。形參、實(shí)參具有相同的地址,即形參、實(shí)參共享同一段存儲(chǔ)單元。在被調(diào)用過(guò)程中改變形參的值,則相應(yīng)實(shí)參的值也被改變。如果在過(guò)程調(diào)用語(yǔ)句中的實(shí)參是參數(shù)或表達(dá)式,則VB用按值傳遞的方法處理。4.4.2參數(shù)按值傳遞和按地址傳遞PrivateFunctionMax(xAsInteger,yAsInteger)DimzAsIntegerIfx<yThenz=x:x=y:y=zEndIfMax=xtxtX.Text=x:txtY.Text=yEndFunctionPrivateSubcmdStart_Click()Dima%,b%,c%a=Val(txtA.Text)b=Val(txtB.Text)txtMax=Max(a,b)txtResultA.Text=atxtResultB.Text=bEndSub【例Ex_Max】/qtzqbf/4.4.2參數(shù)按值傳遞和按地址傳遞【例Ex_MulSum】計(jì)算3!+2!+1!PrivateFunctionMultiply(nAsInteger)AsIntegerMultiply=1DoWhilen>0Multiply=Multiply*nn=n-1LoopEndFunctionPrivateSubForm_Click()DimSumAsInteger,iAsIntegerFori=3To1Step-1Sum=Sum+Multiply(i)NextiPrint"Sum=";SumEndSub4.4.3數(shù)組參數(shù)數(shù)組參數(shù)是指在定義過(guò)程時(shí),可以定義數(shù)組作為過(guò)程的形參。語(yǔ)法:形參數(shù)組名()[As數(shù)據(jù)類型]形參為數(shù)組時(shí),過(guò)程調(diào)用時(shí)的實(shí)參必須也是數(shù)組。實(shí)參列表中的數(shù)組不需要用“()”。數(shù)組的參數(shù)傳遞只能按地址傳遞,形參與實(shí)參共用同一段內(nèi)存單元。4.4.3數(shù)組參數(shù)【例Ex_AverScore】計(jì)算正式員工和臨時(shí)員工的平均工資PrivateSubcmdStart_Click()DimSalary1(5)AsSingle,Salary2(8)AsSingleSalary1(0)=1900:Salary1(1)=1970:Salary1(2)=1915Salary1(3)=1600:Salary1(4)=1655Salary2(0)=2675:Salary2(1)=2780:Salary2(2)=2715Salary2(3)=2540:Salary2(4)=2990Salary2(5)=2770:Salary2(6)=2895:Salary2(7)=2765txtS1.Text=Int(Average(Salary1,5)*100)/100txtS2.Text=Int(Average(Salary2,8)*100)/100EndSubPrivateFunctionAverage(stuArray()AsSingle,nAsInteger)AsSingleDimiAsIntegerDimaverAsSingle,sumAsSingleFori=0Ton-1sum=sum+stuArray(i)Nextiaver=sum/nAverage=averEndFunction賦初始值Salary1為臨時(shí)員工Salary2為正式員工調(diào)用Average函數(shù)計(jì)算平均工資,并在文本框中顯示計(jì)算工資總和4.4.4對(duì)象參數(shù)VB中對(duì)象也可以作為形參,將對(duì)象向被調(diào)用過(guò)程傳遞。對(duì)象的傳遞只能按地址傳遞。對(duì)象的類型聲明為“Control”或控件類型,如:“Lable”、“Form”。4.4.4對(duì)象參數(shù)PrivateSubcmdEmployee_Click(IndexAsInteger)CallfrmSelect(frmSecond,cmdEmployee(Index).Caption)CalllabSelect(frmSecond.Label1,cmdEmployee(Index).Caption)EndSubPrivateSubfrmSelect(FAsForm,cmdCapAsString)F.Caption=cmdCap&"人員管理"EndSubPrivateSublabSelect(LAsLabel,cmdCapAsString)L.Caption="歡迎進(jìn)入"&Chr(13)&cmdCap&"人員管理"L.FontSize=16L.FontBold=TrueL.Visible=TruefrmSecond.ShowfrmFirst.HideEndSub【例Ex_FormArgu1】創(chuàng)建兩個(gè)窗體的人員管理系統(tǒng)4.5遞歸過(guò)程在VB中Sub過(guò)程可以進(jìn)行遞歸調(diào)用,即在過(guò)程中可以直接或間接地調(diào)用過(guò)程本身。PrivateFunctionFNC(xasInteger)DimyAsInteger,zAsSingle……z=FNC(y)……EndFunction這種遞歸結(jié)構(gòu)會(huì)使過(guò)程進(jìn)入無(wú)限死循環(huán)?遞歸程序的編程方法:
確定遞歸公式
遞歸的結(jié)束條件
采用條件結(jié)構(gòu)編寫(xiě)程序4.5遞歸過(guò)程【例Ex_MulN1】計(jì)算n的階乘1遞歸的形式n!=n×(n-1)×(n-2)×……×2×1
可以寫(xiě)成:n!=n×(n-1)!(n-1)!=(n-1)×(n-2)!……遞歸公式為:n!=n×(n-1)!2遞歸的結(jié)束條件n=0或1時(shí)n!=14.5遞歸過(guò)程【例Ex_MulN1】計(jì)算n的階乘PrivateSubForm_Click()DimMAsInteger,iAsIntegeri=InputBox("請(qǐng)輸入一個(gè)正整數(shù)")M=Muln(i)Print"M=";MEndSubPrivateFunctionMuln(nAsInteger)AsIntegerIfn=0Orn=1ThenMuln=1ElseMuln=Muln(n-1)*nEndIfEndFunctionPrivateFunctionMuln(nAsInteger)AsIntegerSelectCasenCase0Or1Muln=1CaseIs>1Muln=Muln(n-1)*nEndSelectEndFunction4.6變量和過(guò)程的作用范圍4.6.1變量的作用范圍變量的作用范圍是指變量有效的范圍。在VB中可分為過(guò)程級(jí)變量、模塊級(jí)變量和全局變量三種。1過(guò)程級(jí)變量:過(guò)程級(jí)變量只在聲明它們的過(guò)程中才有效,也稱為局部變量。用戶無(wú)法在其他過(guò)程中訪問(wèn)或改變變量的值。
過(guò)程級(jí)變量的定義方法:Dim變量名As數(shù)據(jù)類型Static變量名As數(shù)據(jù)類型4.6.1變量的作用范圍PrivateFunctionMax(xAsInteger,yAsInteger)DimzAsIntegerIfx<yThenz=x:x=y:y=zEndIfMax=xtxtX.Text=x:txtY.Text=yEndFunction對(duì)于臨時(shí)的計(jì)算,適合聲明為局部變量。不同過(guò)程中的局部變量可以重名。在過(guò)程中使用Dim語(yǔ)句定義的變量都是局部變量。4.6.1變量的作用范圍2模塊級(jí)變量:模塊級(jí)變量對(duì)該模塊的所有過(guò)程都有效。在模塊中的任何過(guò)程都可以使用該變量。
模塊級(jí)變量的定義方法:Dim變量名As數(shù)據(jù)類型Private變量名As數(shù)據(jù)類型4.6.1變量的作用范圍3全局變量:全局變量的作用范圍是應(yīng)用程序的所有過(guò)程,也稱為共用變量。
全局變量的定義方法:Public變量名As數(shù)據(jù)類型4.6.1變量的作用范圍【例Ex_FormArgu2】人員管理系統(tǒng)【例Ex_FormArgu2】人員管理系統(tǒng)首先創(chuàng)建2個(gè)窗體文件和一個(gè)標(biāo)準(zhǔn)模塊文件。
給全局變量賦值窗體2內(nèi)標(biāo)簽控件顯示的內(nèi)容窗體2標(biāo)題欄顯示的內(nèi)容計(jì)算平均值的函數(shù)過(guò)程4.6.2靜態(tài)變量變量除了作用范圍外,還有存活期的概念,即變量能夠保持其值的時(shí)間。模塊級(jí)變量和全局變量的存活期是整個(gè)應(yīng)用程序的運(yùn)行期間。在過(guò)程中用Dim語(yǔ)句定義的局部變量?jī)H當(dāng)本過(guò)程執(zhí)行期間存在。當(dāng)過(guò)程執(zhí)行完畢,變量的存儲(chǔ)空間被釋放,在下一次執(zhí)行該過(guò)程時(shí)所有局部變量將重新初始化。可以使用Static語(yǔ)句將局部變量定義為靜態(tài)局部變量,這樣過(guò)程結(jié)束后保留變量的值,即不釋放變量占用的內(nèi)存單元。StaticSsAsIntegerDimTtAsDouble4.6.2靜態(tài)變量【例Ex_Plus】PrivateStaticFunctionFac(nAsInteger)DimfAsIntegerf=f+nFac=fEndFunctionPrivateSubForm_Click()DimiAsIntegerFori=1To5Print"∑";i&"="&Fac(i)NextiEndSub在過(guò)程定義語(yǔ)句中使用Static關(guān)鍵字,則過(guò)程中定義的所有變量為靜態(tài)局部變量。在點(diǎn)擊窗體的事件過(guò)程中,通過(guò)For循環(huán)結(jié)構(gòu)共調(diào)用了5次Fac函數(shù)過(guò)程。因?yàn)椴捎昧遂o態(tài)變量,每次調(diào)用結(jié)束后,f的值被保留。若定義的不是靜態(tài)變量運(yùn)行結(jié)果不同。將f設(shè)為模塊級(jí)變量,運(yùn)行結(jié)果相同。但模塊內(nèi)所有過(guò)程都能對(duì)f值進(jìn)行修改,故容易出錯(cuò)。4.6.3過(guò)程的作用范圍1過(guò)程的有效范圍:Sub過(guò)程和Function過(guò)程的作用范圍有全局過(guò)程和局部過(guò)程2種。通過(guò)Public和Private關(guān)鍵字定義。Private
Sub過(guò)程名(參數(shù)列表)僅在本模塊才能訪問(wèn)Public
Sub過(guò)程名(參數(shù)列表)程序的所有模塊都能訪問(wèn)4.6.3過(guò)程的作用范圍2過(guò)程的外部調(diào)用:外部調(diào)用是指調(diào)用其他模塊中的全局過(guò)程。(1)調(diào)用窗體模塊中的過(guò)程:必須以窗體名作為調(diào)用的前綴語(yǔ)法:Call窗體名.全局過(guò)程名[(實(shí)參列表)]例如:在窗體Form2中定義一個(gè)全局過(guò)程Sub1,在窗體1中調(diào)用該過(guò)程。PrivateSubForm_Click()
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園戶外活動(dòng)的教研探討計(jì)劃
- 第19課 探索宇宙(教學(xué)設(shè)計(jì))-2023-2024學(xué)年六年級(jí)科學(xué)下冊(cè)同步備課(青島版)
- 加強(qiáng)倉(cāng)庫(kù)流程管理的實(shí)施方案計(jì)劃
- 《貴州創(chuàng)泰礦業(yè)有限公司修文縣龍場(chǎng)鎮(zhèn)高倉(cāng)老二洞鋁鐵礦山礦產(chǎn)資源綠色開(kāi)發(fā)利用方案(三合一)》評(píng)審意見(jiàn)
- (高清版)DB3715∕T 7-2022 黑水虻飼養(yǎng)技術(shù)規(guī)程
- 統(tǒng)編版小學(xué)語(yǔ)文二年級(jí)下冊(cè)第3課《開(kāi)滿鮮花的小路》精美課件
- Unit 7 Days and Months Lesson 5 colorful seasons 教學(xué)設(shè)計(jì) 2024-2025學(xué)年冀教版(2024)七年級(jí)英語(yǔ)上冊(cè)
- 固態(tài)電池知識(shí)培訓(xùn)課件
- 能源行業(yè):石油工程師簡(jiǎn)歷
- 初中體育與健康 初二上 水平四 八年級(jí)(第一學(xué)期)籃球大單元教學(xué)設(shè)計(jì)+體前變向換手運(yùn)球突破投籃教學(xué)設(shè)計(jì)
- 2024年蘇州衛(wèi)生職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)附答案
- 六年級(jí)語(yǔ)文下冊(cè)第五單元教材解析
- 湖南省2021年普通高等學(xué)校對(duì)口招生考試英語(yǔ)
- 《通信電源培訓(xùn)》課件
- 《CT檢查技術(shù)》課件-CT圖像后處理
- 水產(chǎn)生物遺傳育種學(xué)課件
- 婦產(chǎn)科醫(yī)患溝通護(hù)理課件
- 第3課《萬(wàn)物共存》課件
- 精致的八寶飯
- GB/T 43602-2023物理氣相沉積多層硬質(zhì)涂層的成分、結(jié)構(gòu)及性能評(píng)價(jià)
- 醫(yī)院預(yù)算執(zhí)行情況分析報(bào)告
評(píng)論
0/150
提交評(píng)論