




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第四章VB程序設(shè)計第四章VB程序設(shè)計在設(shè)計一個規(guī)模較大、功能較復(fù)雜的程序時,需要按功能將程序分解成若干個相互獨立的部件,VB稱這些部件為過程。在程序編寫時,分別對每個“過程”編寫程序,可以簡化程序設(shè)計任務(wù)。本章主要對工程、模塊和過程進行介紹。4.1文件類型VB應(yīng)用程序由擴展名為.vbp、.frm、.frx、.bas、.cls等幾種類型的文件組成。窗體文件(.frm)包含窗體、控件的描述和屬性設(shè)置,也包含窗體級的常數(shù)、變量、外部過程的聲明,以及事件過程和一般過程。如果程序沒有frm窗體文件,則表示沒有用戶界面。窗體的二進制數(shù)據(jù)文件(.frx)含有窗體上控件的二進制屬性數(shù)據(jù)。這些文件是在創(chuàng)建窗體時自動產(chǎn)生的。4.1文件類型標準模塊文件(.bas)用于存放幾個窗體中都需要用的公共代碼,包含常數(shù)、類型、變量和過程的聲明,以及過程代碼。類模塊文件(.cls)用于建立新對象,這些新對象可以包含自定義的屬性和方法。類模塊即包含代碼又包含數(shù)據(jù),可被應(yīng)用程序內(nèi)的過程調(diào)用。/htbf/4.1文件類型工程文件(.vbp)工程文件包含組成應(yīng)用程序的所有窗體文件(.frm)、模塊文件(.bas)和其它文件,也包含環(huán)境設(shè)置選項方面的信息。工程的操作:打開和保存工程:通過“文件”菜單進行打開和保存工作設(shè)置工程屬性:“工程”菜單,“工程屬性”對話框操作添加工程:工具欄或“文件”菜單添加已有工程或新建工程添加多個工程可組成工程組刪除工程:“工程資源管理器”中通過右鍵快捷菜單向工程中添加和刪除文件:工具欄或“工程”菜單4.2過程將較為復(fù)雜的程序分割成較小的邏輯部件,這些部件稱為過程。每個過程為一段程序,一個過程可以被另一個過程調(diào)用。多個過程構(gòu)成一個完整、復(fù)雜的應(yīng)用程序。將應(yīng)用程序分解成過程進行分別調(diào)試,可極大地簡化程序設(shè)計任務(wù)。4.2過程應(yīng)用程序工程文件窗體文件多個過程標準模塊文件多個過程類模塊文件多個過程工程文件應(yīng)用程序的組成:……………4.2過程過程的分類:子程序過程(SubProcedure)子程序過程沒有返回值函數(shù)過程(FunctionProcedure)函數(shù)過程具有返回值,如a=sin(x)屬性過程(PropertyProcedure)屬性過程可以返回和設(shè)置窗體、標準模塊和類模塊,也可以設(shè)置對象的屬性。VB的所有可執(zhí)行代碼必須屬于某個過程。過程的定義是平行的,不能在一個過程中定義其它過程。4.2.1Sub過程(子程序過程)Sub過程可以放在標準模塊和窗體模塊中。VB中有兩種Sub過程:事件過程通過過程事件過程VB是事件驅(qū)動的,為一個事件所編寫的程序代碼,稱為事件過程。當VB對象中的某個事件發(fā)生時,自動調(diào)用相應(yīng)的事件過程。事件過程分為窗體事件過程和控件事件過程。4.2.1Sub過程(子程序過程)(1)窗體事件過程的語法:PrivateSubForm_事件名([參數(shù)列表])[局部變量和常數(shù)聲明]語句塊EndSub例如:PrivateSubForm_Click()frmText.ShowHideEndSub注意:不管窗體的名稱(Name)屬性是什么,在事件過程中只能使用“Form_事件名”在程序代碼中對窗體的引用須要使用窗體的名稱屬性在程序有多個窗體時,如何對不同窗體的窗體事件編程?將要進行編程的窗體放在屏幕最前端(或在工程資源管理器中選中窗體),再點擊工程資源管理器中的“查看代碼”按鈕;在代碼窗口的標題欄中顯示代碼對應(yīng)的窗體。4.2.1Sub過程(子程序過程)(2)控件事件過程的語法:PrivateSub控件名_事件名([參數(shù)列表])[局部變量和常數(shù)聲明]語句塊EndSub例如:PrivateSubCommand1_Click()Text2=Text1*Text1*3.14EndSub4.2.1Sub過程(子程序過程)(3)事件過程的創(chuàng)建方法:在設(shè)計的窗體上雙擊窗體或控件,打開“代碼編輯器”窗口,并會出現(xiàn)該窗體或控件的默認過程代碼。單擊工程資源管理器窗口的“查看代碼”按鈕,在對象列表框選擇對象,在“過程列表框”選擇事件過程。根據(jù)語法要求,自己編寫事件過程。4.2.1Sub過程(子程序過程)通用過程當幾個不同的事件過程需要執(zhí)行同樣的動作時,為了不重復(fù)編寫代碼,可以采用通用過程來實現(xiàn)。要運行通用過程中的代碼,需要在事件過程對通用過程進行調(diào)用。通用過程可以保存在窗體模塊(.frm)和標準模塊(.bas)兩種模塊中。在VB中,事件過程是必要的,但通用過程不是必要的,是為了程序員方便而單獨建立的。4.2.1Sub過程(子程序過程)(1)通用過程的語法:Private和Public:用來聲明該Sub過程是局部的(Private),還是全局的(Public),系統(tǒng)默認值為PublicStatic:表示局部靜態(tài)變量?!办o態(tài)”是指在過程運行結(jié)束后仍保留Sub過程的變量值。過程名:根據(jù)該通用過程的功能,程序員自己定義的名字。與變量的命名規(guī)則相同,在同一模塊中過程名不能重名。[Private|Public][Static]Sub過程名([參數(shù)列表])[局部變量和常數(shù)聲明]語句塊 [ExitSub]
語句塊EndSub4.2.1Sub過程(子程序過程)(1)通用過程的語法:局部變量和常數(shù)聲明:用來聲明過程中定義的變量和常數(shù),可用Dim等語句聲明。ExitSub:使程序立即從一個Sub過程中退出,一般放在分支結(jié)構(gòu)代碼中。語句塊:過程中執(zhí)行的操作,稱為子程序或過程體。EndSub:用于結(jié)束本Sub過程。注意:ExitSub與EndSub是結(jié)束本Sub過程,不是結(jié)束應(yīng)用程序的運行[Private|Public][Static]Sub過程名([參數(shù)列表])[局部變量和常數(shù)聲明]
語句塊
[ExitSub]
語句塊EndSub4.2.1Sub過程(子程序過程)參數(shù)列表:類似于變量的聲明,列出從調(diào)用過程傳遞來的函數(shù)值,稱為形式參數(shù)(簡稱形參),多個形參間用“,”隔開。形參語法:[ByVal|ByRef]變量名[()][As數(shù)據(jù)類型]ByVal:表示該參數(shù)按值傳遞ByRef:表示該參數(shù)按地址傳遞(默認值)[Private|Public][Static]Sub過程名([參數(shù)列表])[局部變量和常數(shù)聲明]語句塊 [ExitSub]
語句塊EndSub注意:即使Sub過程中的參數(shù)列表為空,過程名后的括號也不能省略【例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過程(子程序過程)PublicSubWarning(ByvalfAsinteger)……EndSub[Private|Public][Static]Sub過程名([參數(shù)列表])[局部變量和常數(shù)聲明]語句塊 [ExitSub]
語句塊EndSubPrivateSubWarning(fAsinteger)……EndSub例如:注意:Sub過程不能嵌套定義PublicSubWarning(ByvalfAsinteger)
PrivateSubWelcome() ……EndSub
EndSub4.2.1Sub過程(子程序過程)(2)通用過程的創(chuàng)建方法:方法一:打開“代碼編輯器”窗口后,點擊“工具”菜單的“添加過程”命令方法二:在“代碼編輯器”窗口中手動創(chuàng)建4.2.2Function過程VB系統(tǒng)提供了諸多內(nèi)部函數(shù),如sin()、Date()、Left()等等。用戶可以利用Function過程編寫自己的函數(shù)過程。[Private|Public][Static]Function函數(shù)名([參數(shù)列表])[As數(shù)據(jù)類型][局部變量和常數(shù)聲明]語句塊
[函數(shù)名=表達式]
[ExitFunction]
語句塊 [函數(shù)名=表達式]EndFunction注意:與Sub過程一樣,F(xiàn)unction過程也是一個獨立的過程;與Sub過程不同的是,F(xiàn)unction過程可以返回一個值到調(diào)用的過程[Private|Public][Static]Sub過程名([參數(shù)列表])[局部變量和常數(shù)聲明]語句塊 [ExitSub]
語句塊EndSub4.2.2Function過程[Private|Public][Static]Function函數(shù)名([參數(shù)列表])[As數(shù)據(jù)類型][局部變量和常數(shù)聲明]語句塊 [函數(shù)名=表達式] [ExitFunction]
語句塊
[函數(shù)名=表達式]EndFunctionAs數(shù)據(jù)類型:函數(shù)返回值的數(shù)據(jù)類型,例如sin()函數(shù)的返回值為Double型。若省略“As子句”,默認類型為Variant型。語句塊:描述過程的操作,稱為子函數(shù)體或函數(shù)體。函數(shù)名=表達式:在函數(shù)體中用該語句給函數(shù)賦值。如果在Function過程中省略該語句,則返回值為數(shù)據(jù)類型的默認值。例如,數(shù)值函數(shù)返回0;字符函數(shù)返回空字符串。4.2.2Function過程[Private|Public][Static]Function函數(shù)名([參數(shù)列表])[As數(shù)據(jù)類型][局部變量和常數(shù)聲明]語句塊 [函數(shù)名=表達式]
[ExitFunction]
語句塊 [函數(shù)名=表達式]EndFunctionExitFunction語句:提前退出Function過程。在退出函數(shù)過程之前,必須保證為函數(shù)賦值,否則出錯。4.2.2Function過程Function過程實例:計算直角三角形的斜邊長度
FunctionHypotenuse(AAsInteger,BAsInteger)AsInteger Hypotenuse=Sqr(A^2+B^2)EndFunction實例中:A、B為兩個整型的形式參數(shù)Hypotenuse函數(shù)的返回值為一個整型數(shù)函數(shù)體為賦值語句,計算兩個形參平方和的平方根4.3過程的調(diào)用PrivateSubCommand1_Click()DimYAsDouble,FAsDoubleF=Sin(10)
Y=Sin(Val(Text1.Text))Text2.Text=YEndSub語句1語句2過程1調(diào)用語句語句3語句4語句1語句2過程2調(diào)用語句語句3End過程1語句1語句2語句3End過程2事件過程過程1代碼過程2代碼過程調(diào)用的程序執(zhí)行順序:4.3.1調(diào)用Sub事件過程調(diào)用Sub過程是一個獨立的語句。Sub事件過程可由事件自動調(diào)用,或在同一模塊中的其它過程中使用調(diào)用語句調(diào)用。調(diào)用Sub過程的方法: 1.使用Call語句
語法:Call過程名[(參數(shù)列表)] 2.直接使用過程名
語法:過程名[參數(shù)列表]參數(shù)列表:在調(diào)用語句中的參數(shù)稱為實在參數(shù)(簡稱實參)。實參可以是變量、常數(shù)、數(shù)據(jù)和表達式。使用Call語句調(diào)用時,參數(shù)必須在括號內(nèi);沒有參數(shù)時,括號可省略。用過程名調(diào)用,沒有參數(shù)時必須省略參數(shù)兩邊的括號執(zhí)行調(diào)用語句時,VB將控制傳遞給被調(diào)用的Sub過程。4.3.1調(diào)用Sub事件過程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通用過程SubWarning()IfIsNumeric(txtInput)=TrueThenMsgBox"輸入的是數(shù)值",vbOKOnly,"輸入"ElseMsgBox"輸入的是文字",vbOKOnly,"輸入"EndIfEndSubPrivateSubcmdCheck_Click()
CallWarningEndSubPrivateSubtxtInput_LostFocus()
WarningEndSub【例Ex_CheckN2】注意:VB程序是事件驅(qū)動的,Sub通用過程只有在被其它事件過程直接或間接調(diào)用時才會被執(zhí)行,否則不會被執(zhí)行。4.3.3調(diào)用Function過程調(diào)用函數(shù)Function過程的方法與調(diào)用VB內(nèi)部函數(shù)方法一樣,在語句中直接使用函數(shù)名,F(xiàn)unction過程可以返回一個值到調(diào)用的過程。例如: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過程采用調(diào)用Sub過程的語法也能調(diào)用Function過程,當用這種方法調(diào)用過程時,放棄Function過程的返回值。。調(diào)用Sub過程的方法: 1.使用Call語句
語法:Call過程名[(參數(shù)列表)] 2.直接使用過程名
語法:過程名[參數(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)用一個有參數(shù)的過程時,參數(shù)是在本過程有效的局部變量,通過“形參和實參結(jié)合”傳遞信息。實現(xiàn)調(diào)用過程的實參與被調(diào)用過程的形參之間的數(shù)據(jù)傳遞。數(shù)據(jù)有按值傳遞和按地址傳遞兩種方式。形參:在被調(diào)用過程中的參數(shù)是形參。實參:是在主調(diào)過程中的參數(shù)。4.4.1形參和實參語句1語句2過程1調(diào)用語句語句3語句4語句1語句2語句3End過程14.4.1形參和實參在過程定義語句中的參數(shù)列表為形參列表,在過程被調(diào)用之前,形參未被分配內(nèi)存,只是說明形參的類型和在過程中的作用在過程調(diào)用語句中的參數(shù)列表為實參列表,在過程調(diào)用時實參將數(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形參和實參形參列表和實參列表的對應(yīng)變量名可以不同。實參與形參的個數(shù)、順序和數(shù)據(jù)類型必須相同。形參與實參的數(shù)據(jù)傳遞是按位置結(jié)合的,即第1個實參與第1個形參結(jié)合,第2個實參與第2個形參結(jié)合,依此類推。形參與實參必須是一一對應(yīng)的關(guān)系,否則編譯出錯。例如: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形參和實參例如: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如果沒有聲明形參的數(shù)據(jù)類型,則默認為Variant型數(shù)據(jù)。對于實參數(shù)據(jù)類型那個與形參不一致時,VB會先將實參進行數(shù)據(jù)轉(zhuǎn)換,然后將轉(zhuǎn)換值傳遞給形參。注意:這種數(shù)據(jù)轉(zhuǎn)換只適用于常量的轉(zhuǎn)換。4.4.1形參和實參形參可以使用可選參數(shù),在參數(shù)列表中使用Optional關(guān)鍵字。當使用可選參數(shù)后,形參與實參不必一一對應(yīng),在實參列表中缺省的參數(shù)取值為該數(shù)據(jù)類型的默認值。形參與實參是相對的概念。例如: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程序進行過程調(diào)用時,參數(shù)的傳遞有按值傳遞(PassedByValue)和按地址傳遞(PassedByReference)兩種方式。1按值傳遞參數(shù)參數(shù)按值傳遞使用ByVal關(guān)鍵字。例如:PublicSubWarning(ByvalfAsinteger)……EndSub4.4.2參數(shù)按值傳遞和按地址傳遞1按值傳遞參數(shù)按值傳遞參數(shù)時,VB給傳遞的形參分配一個臨時的內(nèi)存單元,將實參的值傳遞到這個臨時單元。實參向形參傳遞是單向的。如果在被調(diào)用過程中改變了形參值,不會影響實參變量本身。當被調(diào)用過程結(jié)束返回主調(diào)過程時,VB將釋放形參的臨時存儲單元。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)用的過程。形參、實參具有相同的地址,即形參、實參共享同一段存儲單元。在被調(diào)用過程中改變形參的值,則相應(yīng)實參的值也被改變。如果在過程調(diào)用語句中的實參是參數(shù)或表達式,則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】計算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ù)是指在定義過程時,可以定義數(shù)組作為過程的形參。語法:形參數(shù)組名()[As數(shù)據(jù)類型]形參為數(shù)組時,過程調(diào)用時的實參必須也是數(shù)組。實參列表中的數(shù)組不需要用“()”。數(shù)組的參數(shù)傳遞只能按地址傳遞,形參與實參共用同一段內(nèi)存單元。4.4.3數(shù)組參數(shù)【例Ex_AverScore】計算正式員工和臨時員工的平均工資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為臨時員工Salary2為正式員工調(diào)用Average函數(shù)計算平均工資,并在文本框中顯示計算工資總和4.4.4對象參數(shù)VB中對象也可以作為形參,將對象向被調(diào)用過程傳遞。對象的傳遞只能按地址傳遞。對象的類型聲明為“Control”或控件類型,如:“Lable”、“Form”。4.4.4對象參數(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="歡迎進入"&Chr(13)&cmdCap&"人員管理"L.FontSize=16L.FontBold=TrueL.Visible=TruefrmSecond.ShowfrmFirst.HideEndSub【例Ex_FormArgu1】創(chuàng)建兩個窗體的人員管理系統(tǒng)4.5遞歸過程在VB中Sub過程可以進行遞歸調(diào)用,即在過程中可以直接或間接地調(diào)用過程本身。PrivateFunctionFNC(xasInteger)DimyAsInteger,zAsSingle……z=FNC(y)……EndFunction這種遞歸結(jié)構(gòu)會使過程進入無限死循環(huán)?遞歸程序的編程方法:
確定遞歸公式
遞歸的結(jié)束條件
采用條件結(jié)構(gòu)編寫程序4.5遞歸過程【例Ex_MulN1】計算n的階乘1遞歸的形式n!=n×(n-1)×(n-2)×……×2×1
可以寫成:n!=n×(n-1)!(n-1)!=(n-1)×(n-2)!……遞歸公式為:n!=n×(n-1)!2遞歸的結(jié)束條件n=0或1時n!=14.5遞歸過程【例Ex_MulN1】計算n的階乘PrivateSubForm_Click()DimMAsInteger,iAsIntegeri=InputBox("請輸入一個正整數(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變量和過程的作用范圍4.6.1變量的作用范圍變量的作用范圍是指變量有效的范圍。在VB中可分為過程級變量、模塊級變量和全局變量三種。1過程級變量:過程級變量只在聲明它們的過程中才有效,也稱為局部變量。用戶無法在其他過程中訪問或改變變量的值。
過程級變量的定義方法: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對于臨時的計算,適合聲明為局部變量。不同過程中的局部變量可以重名。在過程中使用Dim語句定義的變量都是局部變量。4.6.1變量的作用范圍2模塊級變量:模塊級變量對該模塊的所有過程都有效。在模塊中的任何過程都可以使用該變量。
模塊級變量的定義方法:Dim變量名As數(shù)據(jù)類型Private變量名As數(shù)據(jù)類型4.6.1變量的作用范圍3全局變量:全局變量的作用范圍是應(yīng)用程序的所有過程,也稱為共用變量。
全局變量的定義方法:Public變量名As數(shù)據(jù)類型4.6.1變量的作用范圍【例Ex_FormArgu2】人員管理系統(tǒng)【例Ex_FormArgu2】人員管理系統(tǒng)首先創(chuàng)建2個窗體文件和一個標準模塊文件。
給全局變量賦值窗體2內(nèi)標簽控件顯示的內(nèi)容窗體2標題欄顯示的內(nèi)容計算平均值的函數(shù)過程4.6.2靜態(tài)變量變量除了作用范圍外,還有存活期的概念,即變量能夠保持其值的時間。模塊級變量和全局變量的存活期是整個應(yīng)用程序的運行期間。在過程中用Dim語句定義的局部變量僅當本過程執(zhí)行期間存在。當過程執(zhí)行完畢,變量的存儲空間被釋放,在下一次執(zhí)行該過程時所有局部變量將重新初始化??梢允褂肧tatic語句將局部變量定義為靜態(tài)局部變量,這樣過程結(jié)束后保留變量的值,即不釋放變量占用的內(nèi)存單元。StaticSsAsIntegerDimTtAsDouble4.6.2靜態(tài)變量【例Ex_Plus】PrivateStaticFunctionFac(nAsInteger)DimfAsIntegerf=f+nFac=fEndFunctionPrivateSubForm_Click()DimiAsIntegerFori=1To5Print"∑";i&"="&Fac(i)NextiEndSub在過程定義語句中使用Static關(guān)鍵字,則過程中定義的所有變量為靜態(tài)局部變量。在點擊窗體的事件過程中,通過For循環(huán)結(jié)構(gòu)共調(diào)用了5次Fac函數(shù)過程。因為采用了靜態(tài)變量,每次調(diào)用結(jié)束后,f的值被保留。若定義的不是靜態(tài)變量運行結(jié)果不同。將f設(shè)為模塊級變量,運行結(jié)果相同。但模塊內(nèi)所有過程都能對f值進行修改,故容易出錯。4.6.3過程的作用范圍1過程的有效范圍:Sub過程和Function過程的作用范圍有全局過程和局部過程2種。通過Public和Private關(guān)鍵字定義。Private
Sub過程名(參數(shù)列表)僅在本模塊才能訪問Public
Sub過程名(參數(shù)列表)程序的所有模塊都能訪問4.6.3過程的作用范圍2過程的外部調(diào)用:外部調(diào)用是指調(diào)用其他模塊中的全局過程。(1)調(diào)用窗體模塊中的過程:必須以窗體名作為調(diào)用的前綴語法:Call窗體名.全局過程名[(實參列表)]例如:在窗體Form2中定義一個全局過程Sub1,在窗體1中調(diào)用該過程。PrivateSubForm_Click()
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度旅游景區(qū)保安臨時工臨時服務(wù)合同
- 二零二五年度醫(yī)療貸款擔保人免責服務(wù)合同
- 二零二五年度旅游產(chǎn)品未簽合同消費者權(quán)益保障合同
- 2025年度智能制造行業(yè)勞動合同解除及保密協(xié)議模板
- 2025年度購物中心店面轉(zhuǎn)租與租賃期滿續(xù)約合同
- 天津市2025年度租賃房屋裝修與維修責任協(xié)議
- 二零二五年度美容院轉(zhuǎn)讓合同附帶技術(shù)培訓(xùn)與售后服務(wù)
- 二零二五年度專業(yè)培訓(xùn)機構(gòu)教師團隊建設(shè)與培養(yǎng)合同
- 2025年遂寧考從業(yè)資格證貨運試題
- 2025年銀川貨運從業(yè)資格證考試題目及答案解析
- 沒頭腦和不高興-竇桂梅.精選優(yōu)秀PPT課件
- 鋼棧橋計算書(excel版)
- 租賃合同審批表
- 事業(yè)單位綜合基礎(chǔ)知識考試題庫 綜合基礎(chǔ)知識考試題庫.doc
- 巖石堅固性和穩(wěn)定性分級表
- 譯林初中英語教材目錄
- 律師事務(wù)所函[]第號
- 物業(yè)交付后工程維修工作機制
- 農(nóng)作物病蟲害專業(yè)化統(tǒng)防統(tǒng)治管理辦法
- 新形勢下如何做一名合格的鄉(xiāng)鎮(zhèn)干部之我見
- 食品經(jīng)營單位經(jīng)營場所和設(shè)備布局、操作流程示意圖模板
評論
0/150
提交評論