版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第八章過程8.1過程概述8.2子程序過程(Sub過程)8.3函數(shù)(Fountion過程)8.4過程之間的參數(shù)傳遞8.5過程和變量的作用域8.1過程概述過程:一個實際應(yīng)用程序可分解成多個具有獨立功能的邏輯程序段來實現(xiàn)程序的完整功能,這些邏輯程序段被稱為過程。VisualBasic中的過程:內(nèi)部過程和外部過程。內(nèi)部過程是由系統(tǒng)提供的程序段,用戶在編寫程序時,可以使用內(nèi)部過程名直接調(diào)用內(nèi)部過程。外部過程是用戶根據(jù)需要自己定義編寫的程序段。外部過程可分為事件過程和通用過程。事件過程附加在窗體或控件上,是當(dāng)某事件發(fā)生時,對象對該事件做出響應(yīng)的程序代碼。通用過程:在實際編程中,有時會有多個不同的事件過程需要使用同一段程序代碼。這時把這段代碼獨立出來,編寫成為一個共用的過程,即通用過程,它可供其他事件過程調(diào)用。通用過程根據(jù)是否返回值,可分為子程序過程(Sub過程)和函數(shù)過程(Function過程)。子程序過程不返回值,函數(shù)過程返回函數(shù)值?!鲎映绦蜻^程的定義定義子程序過程有兩種方法:一種是使用“添加過程”對話框,另一種是直接在代碼窗口中輸入過程代碼。8.2子程序過程(Sub過程)1.使用“添加過程”對話框創(chuàng)建■子程序過程的定義8.2子程序過程(Sub過程)2.直接在代碼窗口中定義在窗體或標(biāo)準(zhǔn)模塊的代碼窗口中,按以下格式輸入相應(yīng)的代碼:[Public|Private][Static]Sub<過程名>([形參列表])[語句塊1][ExitSub][語句塊2]EndSub■子程序過程的定義8.2子程序過程(Sub過程)說明:Private:表示Sub過程是一個私有過程,只限于本模塊內(nèi)的其他過程調(diào)用。Public:表示Sub過程是一個公有過程,可在整個應(yīng)用程序范圍調(diào)用。Static:表示Sub過程中的所有局部變量的存儲空間只分配一次,且這些變量的值在整個程序運行期間都存在。過程名:用戶為Sub過程起的名字。命名規(guī)則與變量命名規(guī)則相同。同一模塊內(nèi),Sub過程不能和Function過程同名。形參列表:類似于變量聲明,它指明了從調(diào)用過程傳遞給過程的參量個數(shù)、類型和位置,形參可以是變量名或數(shù)組名。各參數(shù)之間用“,”隔開。參數(shù)定義格式:[ByVal|ByRef]變量名[()][As數(shù)據(jù)類型][,…]ByVal表示該過程被調(diào)用時,參數(shù)是按值傳遞的;默認或ByRef表示該過程被調(diào)用時,參數(shù)是按地址傳遞的。ExitSub:表示退出Sub過程,常常是與選擇結(jié)構(gòu)聯(lián)用,即當(dāng)滿足一定條件時,退出Sub過程?!鲎映绦蜻^程的定義8.2子程序過程(Sub過程)例【8-1】編一個交換兩個整型變量值的Sub過程。PrivateSubswap(aAsInteger,bAsInteger)DimtAsIntegert=a:a=b:b=tEndSub■子程序過程的調(diào)用8.2子程序過程(Sub過程)子程序過程的調(diào)用有兩種方法。1.使用Call語句Call[窗體名|模塊名.]<過程名>[(實參列表)]如:Callswap(m,n)或CallForm1.swap(m,n)2.直接使用過程名[窗體名|模塊名.]<過程名>[<實參列表>]如:swapm,n
或Form1.swapm,n說明:直接使用過程名調(diào)用時必須省略參數(shù)兩邊的括號。使用Call語句調(diào)用時,沒有參數(shù),()也能省,否則參數(shù)必須在括號內(nèi)。在調(diào)用時實參和形參的數(shù)據(jù)類型、順序、個數(shù)必須匹配。■子程序過程的調(diào)用8.2子程序過程(Sub過程)例【8-2】調(diào)用前面的交換兩個整數(shù)的Sub過程。PrivateSubForm_Click()DimfirstAsInteger,secondAsIntegerfirst=Val(InputBox("請輸入第一個整數(shù)"))second=Val(InputBox("請輸入第二個整數(shù)"))Print"交換前first=";first,"second=";secondswapfirst,secondPrint"交換后first=";first,"second=";secondEndSubPrivateSubswap(aAsInteger,bAsInteger)DimtAsIntegert=a:a=b:b=tEndSub形參實參■子程序過程的調(diào)用8.2子程序過程(Sub過程)例【8-3】編寫一個程序,在文本框(Text1)中輸入一個正整數(shù),當(dāng)單擊命令按鈕(Command1)時,調(diào)用Sub過程輸出其階乘。
■子程序過程的調(diào)用8.2子程序過程(Sub過程)創(chuàng)建步驟:(1)新建一個工程,在窗體中添加兩個標(biāo)簽,一個文本框和一個命令按鈕,并按圖8-3設(shè)置它們的屬性。(2)在代碼窗口輸入下列代碼:PrivateSubCommand1_Click()DimjiAsLong,aAsIntegera=Val(Text1.Text)facta,jiLabel2.Caption="其階乘為:"&jiEndSubPrivateSubfact(nAsInteger,fAsLong)DimiAsIntegerf=1Fori=1Tonf=f*iNextEndSub■函數(shù)過程(Function過程)的定義
8.3函數(shù)(Function過程)函數(shù)過程是用戶根據(jù)需要用Function關(guān)鍵字定義的過程,與Sub過程不同的是函數(shù)過程返回一個值。格式:[Public|Private][Static]Function<函數(shù)名>([形參列表])As<類型>[語句塊1][函數(shù)名=返回值][ExitFunction][語句塊2][函數(shù)名=返回值]EndFunction說明:As<類型>:是指函數(shù)的返回值類型,若省略,則函數(shù)返回Variant類型。ExitFunction:常常是與選擇結(jié)構(gòu)聯(lián)用,即當(dāng)滿足一定條件時,退出Function過程。在函數(shù)體內(nèi),函數(shù)名可以當(dāng)變量名使用,函數(shù)值通過函數(shù)名返回,因此在函數(shù)過程中至少要對函數(shù)名賦值一次?!龊瘮?shù)過程(Function過程)的定義
8.3函數(shù)(Function過程)例【8-4】編寫一個函數(shù)過程,當(dāng)調(diào)用該過程時,能求出一個正整數(shù)的階乘值。PrivateFunction
fact(nAsInteger)AsLongDimiAsIntegerf=1Fori=1Tonf=f*iNextfact=fEndFunction
■函數(shù)過程的調(diào)用
8.3函數(shù)(Function過程)例【8-5】利用例【8-4】的函數(shù)過程,編寫一個與例【8-3】一樣功能的程序。在文本框(Text1)中輸入一個正整數(shù),當(dāng)單擊命令按鈕(Command1)時,調(diào)用例【8-4】函數(shù)過程輸出其階乘。編寫程序代碼PrivateSubCommand1_Click()DimjiAsLong,aAsIntegera=Val(Text1.Text)
ji=fact(a)Label2.Caption="其階乘為:"&jiEndSub例【8-5】PrivateFunctionfact(nAsInteger)AsLongDimiAsIntegerf=1Fori=1Tonf=f*iNextfact=fEndFunction■函數(shù)過程的調(diào)用
8.3函數(shù)(Function過程)例【8-6】編寫一個求兩個數(shù)中較大數(shù)的函數(shù)過程。然后調(diào)用該函數(shù)過程求任意兩個數(shù)中較大的數(shù)。PrivateFunctionmax(aAsSingle,bAsSingle)AsSinglemax=IIf(a>=b,a,b)EndFunctionPrivateSubCommand1_Click()DimmAsSingle,nAsSinglem=Text1.Text:n=Text2.TextLabel3.Caption="大數(shù)為:"&max(m,n)EndSub■形式參數(shù)和實際參數(shù)
8.4過程之間的參數(shù)傳遞1.形式參數(shù)形式參數(shù)簡稱形參,是指在定義通用過程時,出現(xiàn)在Sub或Function語句中過程名后面圓括號內(nèi)的變量名,是用來接收傳送給過程的數(shù)據(jù),形參列表中的各形式參數(shù)之間用逗號分隔。2.實際參數(shù)實際參數(shù)簡稱實參,是指在調(diào)用Sub或Function過程時,寫入過程名后面圓括號內(nèi)的參數(shù)。其作用是將它們的數(shù)據(jù)(數(shù)值或地址)傳送給Sub或Function過程與其對應(yīng)的形參變量。實參列表可由常量、表達式、有效的變量名、數(shù)組名(后加左右圓括號,如Arr())組成,實參表中的各實際參數(shù)之間用逗號分隔。■形式參數(shù)和實際參數(shù)
8.4過程之間的參數(shù)傳遞在過程調(diào)用時必須先完成“實參列表”與“形參列表”的結(jié)合,即把實參傳遞給形參,參數(shù)的傳遞是按實參與形參對應(yīng)位置進行的,不是按同名的原則進行的,這就要求實參與形參在類型、個數(shù)、位置上要一一對應(yīng);然后按實參執(zhí)行調(diào)用的過程。■參數(shù)傳遞方式
8.4過程之間的參數(shù)傳遞在調(diào)用過程時,參數(shù)的傳遞有兩種方式:按地址傳遞(即傳址)和按值傳遞(傳值),其中按地址傳遞方式是默認方式。按值傳遞(傳值):當(dāng)定義過程時在形參前加上ByVal關(guān)鍵字或在傳遞實參時實參為常量或表達式。按地址傳遞(即傳址):當(dāng)定義過程時在形參前加上ByRef關(guān)鍵字時參數(shù)的傳遞方式就是傳址方式或缺省沒有關(guān)鍵字“ByVal”。VB6.0中參數(shù)的傳遞方式默認為傳址方式。1.傳值將實參的數(shù)值傳遞給過程中對應(yīng)的形參變量。按值傳遞參數(shù)時,VisualBasic給傳遞的形參分配一個臨時的內(nèi)存單元,將實參的值傳遞到這個臨時單元中去。按值傳遞是單向的。如果在被調(diào)用過程中改變了形參變量的值,則只是變動了臨時單元的值,不會影響實參變量的值。當(dāng)被調(diào)過程結(jié)束返回調(diào)用過程時,VisualBasic釋放形參變量的臨時單元,實參變量的值不變。■參數(shù)傳遞方式
8.4過程之間的參數(shù)傳遞2.傳址(默認方式)是一種將實參的地址傳遞給過程中對應(yīng)形參變量的方式,形參變量和實參變量具有相同的地址,即形參、實參共用一存儲單元。按地址傳遞是雙向的。如果在被調(diào)用過程中改變了形參變量的值,當(dāng)被調(diào)過程結(jié)束返回調(diào)用過程時,實參變量的值也改變。
實參的使用形式?jīng)Q定數(shù)據(jù)的傳遞方式。
在過程調(diào)用時,如果實參是常量或表達式,無論過程定義時使用按地址傳遞(即傳址)還是按值傳遞(即傳值),此時都是按值傳遞方式將常量或表達式計算的值傳遞給形參變量。如果在定義時是按地址傳遞(即傳址),但調(diào)用時想使實參按值傳遞,可以把實參變量加上圓括號,將其轉(zhuǎn)換為表達式。
■參數(shù)傳遞方式
8.4過程之間的參數(shù)傳遞例【8-7】傳址和傳值方式的比較。編寫交換兩個數(shù)的過程程序代碼Swap1和Swap2。Swap1按地址傳遞參數(shù),Swap2按值傳遞參數(shù)。運行程序,觀察它們的區(qū)別。
創(chuàng)建過程:(1)新建一個工程,在窗體中添加兩個命令按鈕,并按圖設(shè)置有關(guān)的對象屬性?!鰠?shù)傳遞方式
8.4過程之間的參數(shù)傳遞(2)編寫兩個過程Swap1和Swap2:SubSwap1(xAsInteger,yAsInteger)DimtAsIntegert=x:x=y:y=tEndSubSubSwap2(ByValxAsInteger,ByValyAsInteger)DimtAsIntegert=x:x=y:y=tEndSub(3)編寫兩個命令按鈕單擊事件過程如下:PrivateSubCommand1_Click()Print"按地址傳遞"DimaAsInteger,bAsIntegera=10:b=20Print"兩數(shù)交換前:a=";a;"b=";bSwap1a,bPrint"兩數(shù)交換后:a=";a;"b=";bEndSubPrivateSubCommand2_Click()Print"按值傳遞"DimaAsInteger,bAsIntegera=10:b=20Print"兩數(shù)交換前:a=";a;"b=";bSwap2a,bPrint"兩數(shù)交換后:a=";a;"b=";bEndSub■參數(shù)傳遞方式
8.4過程之間的參數(shù)傳遞實參ab實參ab
形參xy形參xy
改變前改變后
圖8-10按地址傳遞參數(shù)示意圖
10202010實參ab實參ab
形參xy形參xy
改變前改變后
圖8-11按數(shù)值傳遞參數(shù)示意圖1020201010201020形參、實參一塊變形參變、實參不變■參數(shù)傳遞方式
8.4過程之間的參數(shù)傳遞例【8-8】下面程序是在窗體單擊事件中,五次調(diào)用子過程Sxyz,每次使用了不同的實際參數(shù)。請認真閱讀此程序,分析程序的輸出結(jié)果。
PrivateSubSxyz(aAsInteger)a=a+5Print"a=";a,EndSubPrivateSubForm_Click()DimxAsInteger,yAsInteger,zAsIntegerx=10:y=20Print“1:x=";x;‘x=10Sxyzx+y‘實參是用表達式,按值傳遞方式傳遞參數(shù),a=35Print“x=";x‘x=10Printz=x+yPrint"2:z=";z;‘z=30Sxyzz‘實參是用變量,按地址傳遞方式傳遞參數(shù),a=35■參數(shù)傳遞方式
8.4過程之間的參數(shù)傳遞Print"z=";z‘z=35PrintPrint"3:x=";x;‘x=10Sxyzx+5‘實參是用表達式,按值傳遞方式傳遞參數(shù),a=20Print"x=";x‘x=10PrintPrint"4:x=";x;‘x=10Sxyz(x)
‘實參是用括號強行轉(zhuǎn)換表達式,按值傳遞方式傳遞參數(shù),a=15Print"x=";x‘x=10PrintPrint"5:x=";x;‘x=10Sxyzx
‘實參是用變量,按地址傳遞方式傳遞參數(shù),a=15Print"x=";x‘x=15EndSub■參數(shù)傳遞方式
8.4過程之間的參數(shù)傳遞例【8-9】編寫程序,求任意兩個正整數(shù)的最大公約數(shù)和最小公倍數(shù)。編程思路:求最大公約數(shù)可以使用“輾轉(zhuǎn)相除法”其步驟是:(1)以大數(shù)m作為被除數(shù),小數(shù)n作為除數(shù),相除后余數(shù)為r。(2)若r不為零,則mn,nr,繼續(xù)相除得到新的r。若r不為零,則重復(fù)此過程,直到r=0。(3)最后的n(除數(shù))就是最大公約數(shù)。思考m、n為何值?■參數(shù)傳遞方式
8.4過程之間的參數(shù)傳遞流程圖■參數(shù)傳遞方式
8.4過程之間的參數(shù)傳遞編程步驟:(1)新建一工程,在窗體上添加四個標(biāo)簽、兩個文本框和一個命令按鈕并設(shè)置有關(guān)對象屬性如圖所示。(2)根據(jù)編程思路,編寫如下求最大公約數(shù)的函數(shù)過程:FunctionHef(ByValmAsLong,ByValnAsLong)AsLongDimrAsLong,tAsLongIfm<nThent=m:m=n:n=tEndIfr=mModn
DoWhiler<>0m=nn=rr=mModnLoopHef=n’函數(shù)返回最大公約數(shù)EndFunction■參數(shù)傳遞方式
8.4過程之間的參數(shù)傳遞(3)編寫命令按鈕的單擊事件過程如下:PrivateSubCommand1_Click()DimaAsLong,bAsLongDimcAsLong,dAsLonga=Val(Text1.Text)b=Val(Text2.Text)c=Hef(a,b)Label3="最大公約數(shù):"&Str(c)d=a*b/cLabel4="最小公倍數(shù):"&Str(d)EndSub請注意:如果使用按地址傳遞參數(shù)方法定義函數(shù),在計算最小公倍數(shù)時,就得不到正確的結(jié)果,為什么??!鰯?shù)組作過程參數(shù)
8.4過程之間的參數(shù)傳遞VisualBasic允許參數(shù)是數(shù)組,數(shù)組只能通過傳址的方式進行傳遞。在傳遞數(shù)組時要注意:(1)在實參列表和形參列表中放入數(shù)組名,忽略維數(shù)的定義,但圓括號不能省略。(2)如果被調(diào)用過程不知道實參數(shù)組的上下界,可用LBound和UBound函數(shù)來確定實參的下界和上界。(3)實參數(shù)組和形參數(shù)組類型必須一致。實參和形參的結(jié)合是按地址傳遞,即形參數(shù)組和實參數(shù)組共用一段內(nèi)存單元?!鰯?shù)組作過程參數(shù)
8.4過程之間的參數(shù)傳遞例【8-10】改寫上章例【7-5】排序程序。用子過程Sort()來排序(流程圖見圖),用子過程GetData產(chǎn)生N個隨機整數(shù),用子過程PrintData()輸出N個數(shù)據(jù)元素。子過程Sort()的流程圖■數(shù)組作過程參數(shù)
8.4過程之間的參數(shù)傳遞PrivateSubForm_Click()Dimx(1To10)AsIntegerGetDatax()Print"排序前的數(shù)據(jù):"PrintDatax()PrintSortx()Print"排序后的數(shù)據(jù):"PrintDatax()EndSubPrivateSubSort(a()AsInteger)DimiAsInteger,jAsInteger,nAsInteger,tempAsIntegern=UBound(a)k=LBound(a)Fori=kTon-1'i控制輪次
Forj=kTon-i'對N-i個元素兩兩比較
Ifa(j)>a(j+1)Then'若次序不對,則馬上交換位置
temp=a(j)
a(j)=a(j+1)
a(j+1)=tempEndIfNextjNextiEndSub■數(shù)組作過程參數(shù)
8.4過程之間的參數(shù)傳遞PrivateSubGetData(a()AsInteger)DimiAsInteger,nAsIntegern=UBound(a)k=LBound(a)Fori=kTona(i)=Int(Rnd*90)+10NextEndSubPrivateSubPrintData(a()AsInteger)DimiAsInteger,nAsIntegern=UBound(a)k=LBound(a)Fori=kTonPrinta(i);"";NextEndSub■可選參數(shù)和不確定參數(shù)*8.4過程之間的參數(shù)傳遞1.可選參數(shù)用戶在定義子過程或函數(shù)時可以定義可選參數(shù)。要指定某個形參為可選參數(shù),在形參變量前加入關(guān)鍵字Optional即可。如果一個過程某個形參為可選參數(shù),則在調(diào)用此過程時可以不提供對應(yīng)于這個形參的實參,并可以使用VisualBasic的內(nèi)部函數(shù)IsMissing來測試過程被調(diào)用時某個參數(shù)是否被省略。還可以指定可選參數(shù)的默認取值。如果一個過程有多個形參,當(dāng)它的一個形參被設(shè)定為可選參數(shù),則這個參數(shù)后面的其他參數(shù)也必是可選的,并且要用Optional關(guān)鍵字來聲明?!隹蛇x參數(shù)和不確定參數(shù)*8.4過程之間的參數(shù)傳遞1.可選參數(shù)例【8-11】可選參數(shù)的使用。PrivateFunctionSum(aAsInteger,bAsInteger,OptionalcAsInteger)AsIntegerDimsAsIntegerIfIsMissing(c)Then‘參數(shù)c被省略則執(zhí)行s=a=bs=a+bElses=a+b+cEndIfSum=sEndFunctionPrivateSubForm_Click()PrintSum(1,2,3)‘提供了可選參數(shù),輸出結(jié)果為6PrintSum(1,2)‘未提供可選參數(shù),輸出結(jié)果為3
EndSub■可選參數(shù)和不確定參數(shù)*8.4過程之間的參數(shù)傳遞1.可選參數(shù)例【8-12】指定可選參數(shù)的默認值。PrivateFunctionSum(aAsInteger,bAsInteger,OptionalcAsInteger=5)AsIntegerDimsAsIntegers=a+b+cSum=sEndFunctionPrivateSubForm_Click()PrintSum(1,2,3)'提供了可選參數(shù)PrintSum(1,2)'未提供可選參數(shù),用默認值5EndSub程序運行后,單擊窗體的輸出結(jié)果為:
68■可選參數(shù)和不確定參數(shù)*8.4過程之間的參數(shù)傳遞2.不確定參數(shù)一般說來,過程調(diào)用中的參數(shù)個數(shù)應(yīng)等于過程定義的參數(shù)個數(shù)。如果使用ParamArray關(guān)鍵字,則過程可以接受任意個數(shù)的參數(shù)。例【8-13】編寫一個計算任意多個數(shù)據(jù)總和的Sum函數(shù),然后進行簡單應(yīng)用。PrivateSubForm_Click()PrintSum(1,2,3)PrintSum(1,2,3,4,5)EndSubPrivateFunctionSum(ParamArraya())AsIntegerDimiAsInteger,sAsIntegers=0Fori=LBound(a)ToUBound(a)s=s+a(i)NextSum=sEndFunction■代碼模塊
8.5過程和變量的作用域各種控件函數(shù)過程(Functionn)Sub過程事件過程一個或若干個窗體模塊文件(.frm)一個或若干個標(biāo)準(zhǔn)模塊文件(.bas)類模塊文件(.cls)VB工程(*.Vbp)1.Sub過程2.事件過程圖8-18VisualBasic的應(yīng)用程序的結(jié)構(gòu)■代碼模塊
8.5過程和變量的作用域1.窗體模塊每個窗體對應(yīng)一個窗體模塊,窗體模塊包含窗體及其控件的屬性設(shè)置、窗體變量的說明、事件過程、窗體內(nèi)的通用過程、外部過程的窗體級聲明。窗體模塊保存在擴展名為.frm的文件中。默認時應(yīng)用程序中只有一個窗體,因此有一個以.frm為擴展名的文件。如果應(yīng)用程序有多個窗體,就會有多個以.frm為擴展名的窗體模塊文件?!龃a模塊
8.5過程和變量的作用域2.標(biāo)準(zhǔn)模塊簡單的應(yīng)用程序可以只有一個窗體,應(yīng)用程序的所有代碼都存放在窗體模塊中。而當(dāng)應(yīng)用程序龐大復(fù)雜時,就要另加窗體。當(dāng)在幾個窗體中都有要執(zhí)行的公共代碼,又不希望在兩個窗體中重復(fù)相同的代碼時,這就需要創(chuàng)建一個獨立的模塊,它包含公共代碼。這個獨立的模塊就是標(biāo)準(zhǔn)模塊。標(biāo)準(zhǔn)模塊保存在文件擴展名為.bas的文件中,缺省時應(yīng)用程序中不包含標(biāo)準(zhǔn)模塊?!龃a模塊
8.5過程和變量的作用域2.標(biāo)準(zhǔn)模塊在工程中添加標(biāo)準(zhǔn)模塊的步驟為:(1)從“工程”菜單中執(zhí)行“添加模塊”命令,則打開“添加模塊”對話框中的“新建”選項卡,如圖8-22所示。(2)在該對話框中雙擊“模塊”圖標(biāo),將打開新建標(biāo)準(zhǔn)模塊窗口,如圖8-23所示(3)新添加的第一個標(biāo)準(zhǔn)模塊,其名稱為“Module1”,可以通過屬性窗口,給模塊命名。接下來就是在標(biāo)準(zhǔn)模塊的代碼窗口編寫程序。■代碼模塊
8.5過程和變量的作用域3.類模塊在VisualBasic中類模塊(文件擴展名為.cls)是面向?qū)ο缶幊痰幕A(chǔ)。可在類模塊中編寫代碼建立新對象,這些新對象可以包含自定義的屬性和方法,可以在應(yīng)用程序內(nèi)的過程中使用?!鲞^程的作用域8.5過程和變量的作用域1.模塊級過程模塊級過程是在某個模塊(文件)內(nèi)定義的過程,在Sub或Function前加關(guān)鍵字Private,則該過程只能在本模塊中定義的過程調(diào)用,即其作用域為本模塊(文件)。過程的作用域分為模塊級(或稱文件級)和全局級(或稱工程級或項目級)■過程的作用域8.5過程和變量的作用域2.全局級過程全局級過程是在定義過程時,在Sub或Function前加關(guān)鍵字Public(可以默認),則該過程能在整個應(yīng)用程序的所有模塊定義的過程調(diào)用,即其作用域為整個應(yīng)用程序(工程)調(diào)用時的規(guī)則如下:在標(biāo)準(zhǔn)模塊內(nèi)定義的公有過程,調(diào)用時只需寫出過程名和所需參數(shù);如果是在窗體模塊內(nèi)定義的公有過程,那么其他窗體來調(diào)用它時,應(yīng)在過程名前指明它所在的窗體;在不同模塊中定義的全局級過程可以同名,調(diào)用時如果在過程名前一律加上模塊名,則不論什么情況都沒問題?!鲞^程的作用域8.5過程和變量的作用域例【8-14】模塊級、全局級過程的使用。應(yīng)用程序(工程)包括一個窗體,在窗體代碼窗口的代碼如下:PublicFunctionArea(xAsSingle,yAsSingle)Area=x*yEndFunctionPrivateSubCommand1_Click()DimaAsSingle,bAsSinglea=Val(Text1.Text)b=Val(Text2.Text)Label3=Area(a,b)EndSub■過程的作用域8.5過程和變量的作用域表8-1不同作用范圍的兩種過程定義及調(diào)用規(guī)則全局級模塊級定義位置窗體標(biāo)準(zhǔn)模塊窗體標(biāo)準(zhǔn)模塊定義方式在過程名前加Public或省略在過程名前加Private能否被本模塊其他過程調(diào)用能能能能能否被本應(yīng)用程序其他模塊調(diào)用能,但必須在過程名前加窗體名能,但過程名必須唯一,否則要在過程前加標(biāo)準(zhǔn)模塊名不能不能說明:(1)全局級過程若是在窗體模塊中定義,其他模塊的過程要調(diào)用,必須在該過程名前加該過程所處的窗體名。例如,在窗體Form1中調(diào)用窗體模塊Form2中的名為Myfun的全局過程,使用如下的形式:CallForm2.Myfun[(實參表)]或Form2.Myfun[(實參表)](2)在標(biāo)準(zhǔn)模塊中定義的全局級過程,外部過程均可調(diào)用,但過程名必須唯一,即在工程的多個標(biāo)準(zhǔn)模塊中的全局過程名不相同,否則調(diào)用時就要加標(biāo)準(zhǔn)模塊名。例如,在Module1和Module2中都有一個名為Myfun的全局過程,則調(diào)用Module1中的Myfun過程,就應(yīng)使用如下的形式:CallModule1.Myfun[(實參表)]或Module1.Myfun
實參表(3)若是一個只包含一個窗體的簡單應(yīng)用程序,可直接在本窗體模塊中用Private或Public關(guān)鍵字定義過程。(4)若是包含多個窗體的應(yīng)用程序,一般把子過程和函數(shù)過程放在標(biāo)準(zhǔn)模塊中,并用Public關(guān)鍵字定義,這樣定義的過程可被本應(yīng)用程序的所有過程直接訪問。■變量的作用域和生存期
8.5過程和變量的作用域變量可以分為:過程級變量(局部變量)、窗體/模塊級變量(私有的模塊級變量)和全局級變量(公有的模塊級變量)。1.過程級變量——局部變量在過程內(nèi)部定義的變量就是“過程級變量”。在一個過程內(nèi)部使用Dim或Static聲明的變量,只有該過程內(nèi)部的代碼才能訪問或改變該變量的值。也就是說,過程級變量的作用范圍被限制在該過程的內(nèi)部。過程級變量常用于存儲臨時數(shù)據(jù)或運算的中間結(jié)果。PrivateSubCommand1_Click()DimaAsInteger,bAsIntegerStaticcAsInteger……EndSub■變量的作用域和生存期
8.5過程和變量的作用域例【8-15】過程級局部變量示例。PrivateSubCommand1_Click()DimaAsInteger,bAsInteger,cAsIntegera=100:b=10:c=a+bPrint"調(diào)用子過程前,單擊事件過程中變量的值:"Print"a=";a;"b=";b;"c=";cCallMysubPrint"調(diào)用子過程后,單擊事件過程中變量的值:"Print"a=";a;"b=";b;"c=";cEndSubSubMysub()DimaAsInteger,bAsInteger,cAsIntegera=22:b=11:c=a+bPrint"通用過程中變量的值:"Print"a=";a;"b=";b;"c=";cEndSub
■變量的作用域和生存期
8.5過程和變量的作用域2.窗體/模塊級變量在模塊的通用聲明段中用Dim語句或用Private語句聲明的變量,可被本窗體/模塊的任何過程訪問。但其他模塊卻不能訪問該變量。通常,一個模塊是由多個過程組成的,如果希望在整個模塊中的多個過程中使用同一個變量,就有必要將其聲明為窗體/模塊級變量。例如:DimaAsInteger,bAsIntegerPrivatecAsIntegerPrivateSubCommand1_Click()……EndSub……■變量的作用域和生存期
8.5過程和變量的作用域例【8-16】模塊級變量示例。修改上例,把變量聲明放在模塊頂部的聲明段中,各過程不再進行變量聲明.DimaAsInteger,bAsInteger,cAsIntegerPrivateSubCommand1_Click()a=100:b=10:c=a+bPrint"調(diào)用子過程前,單擊事件過程中變量的值:"Print"a=";a;"b=";b;"c=";cCallMysubPrint"調(diào)用子過程后,單擊事件過程中變量的值:"Print"a=";a;"b=";b;"c=";cEndSubSubMysub()a=22:b=11:c=a+bPrint"通用過程中變量的值:"Print"a=";a;"b=";b;"c=";cEndSub■變量的作用域和生存期
8.5過程和變量的作用域3.全局變量1)全局變量也稱公有的模塊級變量,在窗體模塊或標(biāo)準(zhǔn)模塊的頂部的“通用”聲明段用Public關(guān)鍵字聲明,它的作用范圍是整個應(yīng)用程序,即可被本應(yīng)用程序的任何過程或函數(shù)訪問。例如:PublicaAsInteger,bAsInteger,cAsInteger2)在標(biāo)準(zhǔn)模塊中聲明的全局變量,在應(yīng)用程序的任何一個過程中可以直接用該變量名來引用它。3)在某個窗體模塊中聲明的全局變量,當(dāng)其他窗體模塊引用它時,必須用定義它的窗體模塊名為前綴。如:Form1.max,表示訪問在Form1
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026福建泉州石獅市自然資源局招聘編外工作人員1人參考考試題庫附答案解析
- 2026廣東省疾病預(yù)防控制中心招聘項目助理1人參考考試題庫附答案解析
- 2026廣東佛山南海農(nóng)商銀行科技金融專業(yè)人才社會招聘備考考試試題附答案解析
- 2026年上半年黑龍江事業(yè)單位聯(lián)考哈爾濱市招聘592人參考考試試題附答案解析
- 中國生產(chǎn)者責(zé)任延伸制度
- 企業(yè)安全生產(chǎn)制度范本
- 園林綠化生產(chǎn)制度
- 勞動生產(chǎn)現(xiàn)場管理制度
- 汽配生產(chǎn)倉庫管理制度
- 生產(chǎn)助磨劑罰款制度
- 當(dāng)代中國社會分層
- 呆滯存貨處理流程
- GB/T 16895.6-2014低壓電氣裝置第5-52部分:電氣設(shè)備的選擇和安裝布線系統(tǒng)
- GB/T 11018.1-2008絲包銅繞組線第1部分:絲包單線
- GB 31633-2014食品安全國家標(biāo)準(zhǔn)食品添加劑氫氣
- 麻風(fēng)病防治知識課件整理
- 手術(shù)室物品清點護理質(zhì)量控制考核標(biāo)準(zhǔn)
- 消防工程監(jiān)理實施細則
- 權(quán)利的游戲雙語劇本-第Ⅰ季
- 衛(wèi)生部《臭氧消毒技術(shù)規(guī)范》
- 早期復(fù)極綜合征的再認識
評論
0/150
提交評論