visual basic程序設(shè)計課件第9章過程_第1頁
visual basic程序設(shè)計課件第9章過程_第2頁
visual basic程序設(shè)計課件第9章過程_第3頁
visual basic程序設(shè)計課件第9章過程_第4頁
visual basic程序設(shè)計課件第9章過程_第5頁
已閱讀5頁,還剩51頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第9章過程

子程序過程9.1函數(shù)過程

9.2參數(shù)傳遞

9.3

可選參數(shù)與可變參數(shù)9.4

對象參數(shù)9.5子程序過程由Sub…EndSub定義,也稱為Sub過程。9.1子程序過程9.1.1Sub過程的定義9.1.2Sub過程的建立9.1.3Sub過程的調(diào)用9.1.1Sub過程的定義定義Sub過程的一般格式如下:

[Static][Public][Private]Sub過程名[(參數(shù)列表)]

局部變量或常量定義 語句塊

[ExitSub] [語句塊] EndSub用上面的格式定義一個Sub過程如下:PrivateSubTest()Print"ThisisaSubexample"EndSubSub過程以Sub開頭,以EndSub結(jié)束,在它們之間是描述該過程操作的語句塊,稱為過程體或子程序體。上面定義格式中各選項的含義如下:

Static:指定過程中的局部變量都是靜態(tài)變量,即在每次調(diào)用該過程時,局部變量的值保持不變。

Public:表示該Sub過程是公有過程,即可以在程序的任何地方調(diào)用它。

Private:表示該Sub過程是私有過程,即只能被本模塊中的其它過程訪問,不能被其它模塊中的過程訪問。過程名:是一個長度不超過255個字符的變量名,在同一個模塊中,不允許變量名與過程名同名。

參數(shù)列表:指明了在調(diào)用該過程時傳送給過程的參數(shù)的類型和個數(shù),這些參數(shù)稱為“形式參數(shù)”,簡稱“形參”。各參數(shù)之間以逗號分隔,每個參數(shù)的定義格式為:

[ByVal]變量名[()][As數(shù)據(jù)類型]其中ByVal是可選的,如果有ByVal,表示該參數(shù)是“傳值參數(shù)”,不加ByVal的參數(shù)稱為“引用參數(shù)”。Sub過程不能嵌套,也就是說,在Sub過程內(nèi)不能再定義Sub過程或函數(shù)過程。不能用GoTo語句進入或跳出一個Sub過程,只能通過調(diào)用執(zhí)行Sub過程,Sub過程的調(diào)用可以嵌套。下面再看一個Sub過程的例子:SubTry(xAsInteger,ByValyAsInteger) x=x+100 y=y*5 Printx,yEndSub該Sub過程有兩個形參,其中第二個形參前面有ByVal,表示該參數(shù)是一個傳值參數(shù)。再看一個無參的Sub過程:

SubTest() Do Response$=InputBox$(“Continue(YorN)?”) IfResponse$=”N”O(jiān)rResponse$=”n”ThenEnd IfResponse$=”Y”O(jiān)rResponse$=”y”ThenExitDo Loop EndSub9.1.2Sub過程的建立前面我們已學(xué)會如何建立事件過程,Sub過程不屬于任何一個事件過程,因此不能放在事件過程中。Sub過程是一個通用過程,可以在標準模塊中建立,也可以在窗體模塊中建立。在標準模塊中建立通用過程步驟如下:⑴選擇“工程”菜單中的“添加模塊”命令,打開“添加模塊”對話框,在該對話框中選擇“新建”選項卡,然后雙擊“模塊”圖標,打開模塊代碼窗口。⑵選擇“工具”菜單中的“添加過程”命令,打開“添加過程”對話框,如圖9.1所示。在“名稱”框內(nèi)輸入要建立的過程的名字,在“類型”框內(nèi)選擇要建立的過程的類型:子程序過程或函數(shù)過程,在“范圍”框內(nèi)選擇過程的適用范圍。⑶單擊“確定”按鈕,回到模塊代碼窗口,此時可以在Sub和EndSub之間鍵入程序代碼。圖9.1“添加過程”對話框9.1.3Sub過程的調(diào)用可以把Sub過程的調(diào)用當(dāng)作是一句獨立的調(diào)用語句,可以有兩種調(diào)用形式:

Call過程名[(實參表列)]或: 過程名[實參表列]前者用Call關(guān)鍵字,若有實參,必須用小括號括起來,無實參時小括號可省略;而后者去掉了關(guān)鍵字Call,并且實參不需要用小括號括起來。實參也稱實際參數(shù),是在過程被調(diào)用時寫在過程名后面括號中的參數(shù)。且實參的數(shù)據(jù)類型必須與定義過程時的形式參數(shù)一致。它的作用是把需要實際運算的數(shù)據(jù)傳遞給形式參數(shù)。如調(diào)用前面定義的Sub過程Try時,可用:

Call Try(a,b)或:

Try

a,b例9-1(參看教材P147)9.2函數(shù)過程9.2.1Function過程的定義9.2.2Function過程的調(diào)用函數(shù)過程由Function…EndFunction定義,也稱為Function過程。Sub過程不直接返回值,作為獨立的基本語句調(diào)用。而Function過程要返回一個值,通常在一個表達式中被調(diào)用。9.2.1Function過程的定義Function過程的定義格式如下:

[Static][Public][Private]Function過程名[(參數(shù)列表)][As類型]

局部變量或常量定義 語句塊

[過程名=表達式] [ExitFunction] [語句塊] EndFunction其中:[As類型]可選項是Function過程返回的值的數(shù)據(jù)類型,可以是Integer、Long、Single、Double、Currency或String,如果省略,默認為Variant類型。其它各選項與Sub過程相同。把某功能定義為Sub過程還是Function過程,沒有嚴格的規(guī)定。但Function過程有返回值,過程定義時,要定義返回值的數(shù)據(jù)類型,同時在Function過程體內(nèi)可以對Function過程名賦值,該值就是這個函數(shù)的返回值。如果在Function過程體內(nèi)省略:過程名=表達式則該Function過程返回一個默認值(0或空字符串)。編寫用輾轉(zhuǎn)相除法求最大公約數(shù)的函數(shù)過程。程序如下:Functiongcd(ByValxAsInteger,ByValyAsInteger)AsInteger DoWhiley<>0 r=xMody x=y y=r Loop gcd=xEndFunction9.2.2Function過程的調(diào)用由于Function過程能返回一個值,因此完全可以把Function過程當(dāng)做內(nèi)部函數(shù)調(diào)用,只不過內(nèi)部函數(shù)由系統(tǒng)提供,而Function過程由用戶自己定義。例如上面的Function過程gcd,可以在下面的事件過程中調(diào)用:例9-2(參看教材P148-149)例9-3(參看教材P149-150)9.3參數(shù)傳遞9.3.1傳值和傳址9.3.2數(shù)組作參數(shù)傳遞9.3.3按位置傳送和指名傳送在調(diào)用一個過程時,一般主調(diào)過程與被調(diào)過程之間有數(shù)據(jù)傳遞,也就是要把主調(diào)過程的實參傳遞給被調(diào)過程的形參,完成實參與形參的結(jié)合,然后執(zhí)行被調(diào)過程體。在VB中,實參與形參的結(jié)合有兩種方法:傳值(ByVal)和傳址(ByDef)。9.3.1傳值和傳址傳址又稱為引用,是默認的參數(shù)傳遞方法。區(qū)分兩種傳遞方法是看形參前有無“ByVal”關(guān)鍵字。傳址的結(jié)合過程是:當(dāng)調(diào)用一個過程時,將實參的內(nèi)存地址傳遞給形參。因此在被調(diào)過程體中對形參的操作實際是對相應(yīng)實參的操作,實參的值就會隨過程體內(nèi)對形參的值的改變而改變。傳址習(xí)慣上也稱為“引用”。傳值的結(jié)合過程是:當(dāng)調(diào)用一個過程時,系統(tǒng)將實參的值復(fù)制給形參,實參與形參各自占用不同的內(nèi)存單元,過程調(diào)用結(jié)束時,形參所占的內(nèi)存單元也同時被釋放。因此,在過程體內(nèi)對形參的操作不會影響到實參。例9-4(參看教材P150-152)例9-5(參看教材P152)9.3.2數(shù)組作參數(shù)傳遞在VB中允許把數(shù)組作為實參傳遞給一個過程。這時,應(yīng)將數(shù)組名分別放入實參表和形參表中,并略去數(shù)組的上下界,但數(shù)組名后的小括號不能省,以免與普通變量混淆。數(shù)組只能通過傳址方式進行傳遞,也就是說,用數(shù)組作過程參數(shù)時,可以將實參數(shù)組的全部元素傳送給一個過程,而形參數(shù)組中各元素的改變將被帶回到實參數(shù)組。例9-6(參看教材P152-153)例9-7(參看教材P153-154)9.3.3按位置傳送和指名傳送1.按位置傳送按位置傳送是大多數(shù)程序設(shè)計語言在子程序調(diào)用時所使用的參數(shù)傳送方式,在前面的例子中使用的都是按位置傳送。使用按位置傳送時,實參的個數(shù)與形參的個數(shù)必須相等,而且實參的類型必須與相應(yīng)的形參的類型相同,實參的名字與相應(yīng)的形參的名字可以不同。也就是說,實參必須和形參表中同一位置的形參相匹配。如下面定義的一個過程:

SubTest(x1AsInteger,x2AsSingle,x3AsString) …… EndSub我們可以用下面的語句調(diào)用該過程:

CallTest(a%,b!,”ABC”)不難看出,實參a,b,”ABC”分別與對應(yīng)位置上的形參x1,x2,x3類型相同,并且實參的個數(shù)與形參的個數(shù)也相同。在按位置傳送時,實參可以是常數(shù)、合法的變量名、表達式或后面跟有左右括號的數(shù)組名。而形參表中的變量可以是除定長字符串之外的合法變量名或后面跟有左右括號的數(shù)組名。注意只能使用形如Str$或StrAsString之類的變長字符串作為形參,不能用形如StrAsString*8之類的定長字符串作為形參,但定長字符串可以作實參傳送給過程。2.指名傳送除按位置傳送外,在VB中還提供了與Ada語言類似的參數(shù)傳送方式,即指名參數(shù)傳送方式。所謂指名傳送方式,就是顯式地指出與形參結(jié)合的實參,把形參用“:=”與實參連接起來。指名傳送方式不受參數(shù)的位置次序的影響,但要求實參與形參的名字必須相同。如建立如下的過程:

SubTest(x1AsInteger,x2AsInteger,x3AsInteger) …… EndSub使用按位置傳送時,我們可以寫出調(diào)用語句如下:

Test4,6,8如果使用指名傳送方式,則下面的三個調(diào)用語句都是可以的:

Testx1:=4,x2:=6,x3:=8 Testx2:=6,x1:=4,x3:=8 Testx3:=8,x2:=6,x1:=4并且這三個調(diào)用語句是完全等價的。使用指名傳送比使用按位置傳送在書寫上繁瑣,但指名傳送能改善過程調(diào)用的可讀性,而且,當(dāng)參數(shù)較多,類型又相似時,指名傳送比按位置傳送出錯的可能性要小一些。但應(yīng)當(dāng)注意的是,有些方法的調(diào)用是不能使用指名傳送的。使用時可查閱相關(guān)的幫助信息。9.4可選參數(shù)與可變參數(shù)9.4.1可選參數(shù)9.4.2可變參數(shù)在VB中調(diào)用一個過程時,還可以向過程傳送可選的參數(shù)或者任意數(shù)量的參數(shù),即可選參數(shù)和可變參數(shù)。9.4.1可選參數(shù)在前面的例子中,如果一個過程有3個形參,則調(diào)用時必須按相同的順序和類型提供3個實參。在VB中,還可以指定一個或多個參數(shù)作為可選參數(shù),在調(diào)用時,可以不必給可選參數(shù)傳遞實參。為了定義帶可選參數(shù)的過程,需要在可選參數(shù)名前加“Optional”關(guān)鍵字,并在過程體中通過IsMissing函數(shù)測試調(diào)用時是否給可選參數(shù)傳遞實參。例如:SubSum(aAsInteger,bAsInteger,Optionalc)n=a+bIfNotIsMissing(c)Thenn=n+cEndIfPrintnEndSub上述過程中有3個參數(shù),前兩個參數(shù)與前面例子中的參數(shù)相同,最后一個參數(shù)沒有指定類型,默認其類型為Variant,它前面有一個關(guān)鍵字“Optional”,表示它是一個可選參數(shù)。在過程體中,首先計算前兩個參數(shù)的和,并把結(jié)果賦值給變量n,然后用IsMissing函數(shù)測試第三個參數(shù)c是否存在,如果存在,則把第三個參數(shù)c的值也加到變量n中,最后將n的值輸出。在調(diào)用上面的Sum過程時,可以傳遞兩個實參,求出兩個數(shù)的和,也可以傳遞三個實參,求出三個數(shù)的和。如用下面的事件過程調(diào)用上述的Sum過程:PrivateSubForm_Click()Sum10,20EndSub輸出結(jié)果為:

30也可以用下面的過程調(diào)用:

PrivateSubForm_Click() Sum10,20,30 EndSub輸出結(jié)果為:

60上面的Sum過程只有一個可選參數(shù),我們可以根據(jù)實際需要,用同樣的方法設(shè)置兩個或多個可選參數(shù)。但要注意:可選參數(shù)必須放在參數(shù)表列的最后,并且必須是Variant類型。9.4.2可變參數(shù)所謂可變參數(shù),就是在定義過程時參數(shù)的個數(shù)是可變的,這在處理一些問題時是非常有用的。在VB中,建立可變參數(shù)過程可用如下方式定義:

Sub過程名(ParamArray數(shù)組名()) 過程體

EndSub這里的“數(shù)組名()”是一個形參,只有名字和括號,沒有上、下界,其類型默認為Variant類型。前面定義的Sum過程可以求兩個或三個數(shù)的和。如果想求任意多個數(shù)的和,可定義一個可變參數(shù)過程Sum如下: SubSum(ParamArrayNum()) n=0 ForEachxInNum n=n+x Nextx Printn EndSub可以用任意多個實參調(diào)用上面的Sum過程。如編寫下面的事件過程:

PrivateSubForm_Click() Sum1,2,3,4,5 EndSub用該事件過程調(diào)用上面的Sum過程,輸出結(jié)果為:

15由于可變參數(shù)過程中的形參是Variant類型,因此我們可以把任何類型的參傳送給該過程??聪旅孢@個事件過程:

PrivateSubForm_Click() DimaAsInteger,bAsLong,cAsVariant,dAsInteger a=6:b=8:c=12:d=2 Suma,b,c,d EndSub調(diào)用上面的Sum過程,輸出結(jié)果為:289.5對象作參數(shù)9.5.1窗體參數(shù)9.5.2控件參數(shù)除了可以用變量作通用過程的形式參數(shù)外,在VB中,還允許用對象(即窗體或控件)作通用過程的參數(shù)。用窗體或控件作形參時,過程的定義格式與用變量作參數(shù)相同。只不過是把形參表中的對象參數(shù)的類型定義為“Control”或“Form”。但要注意,在調(diào)用含有對象參數(shù)的過程時,對象參數(shù)只能用傳地址方式傳送,也就是在定義過程時,不能在對象參數(shù)前加關(guān)鍵字ByVal。9.5.1窗體參數(shù)假設(shè)我們要設(shè)計一個程序,在這個程序中含有多個窗體(關(guān)于多窗體的程序設(shè)計我們將在后面章節(jié)介紹),而且要求在運行程序時,這些窗體的位置、大小都相同。我們知道,窗體的位置和大小可以通過窗體的Left、Top、Width及Height四個屬性來設(shè)置,假定這些窗體的名字分別為Form1、Form2、Form3…,我們可以寫出下面的程序段:…… Form1.Left=2000 Form1.Top=3000 Form1.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 ……每個窗體都要用四個語句來確定其大小和位置。這四個語句除窗體名不同外,其它都是一樣的。因此,為了避免這些語句的重復(fù)書寫,我們可以用窗體作參數(shù),編寫出如下的通用過程:

SubFormSet(FormNumAsForm) FormNum.Left=2000 FormNum.Top=3000 FormNum.Width=5000 FormNum.Height=3000 EndSub 該過程的形參即為一個窗體類型。在調(diào)用時,就可以用窗體作實參。例如可以用如下的語句調(diào)用上述過程:

FormSetForm1則將按過程中給出的各屬性值設(shè)置窗體Form1的大小和位置。為了調(diào)用上面的通用過程FormSet,可以選擇“工程”菜單中的“添加窗體”命令建立多個窗體,現(xiàn)假設(shè)我們建立4個,即Form1、Form2、Form3和Form4。在默認情況下,第一個建立的窗體(這里假設(shè)是Form1)是啟動窗體。我們對Form1編寫如下的事件過程:

PrivateSubForm_Load() FormSetForm1 FormSetForm2 FormSetForm3 FormSetForm4 EndSub然后對4個窗體分別編寫如下的Click事件過程:PrivateSubForm_Click() Form1.Hide‘窗體Form1隱藏

Form2.Show‘顯示窗體Form2 EndSub PrivateSubForm_Click() Form2.Hide Form3.Show EndSub PrivateSubForm_Click() Form3.Hide Form4.Show EndSub PrivateSubForm_Click() Form4.Hide Form1.Show EndSub于是,在運行程序時,首先顯示Form1,單擊該窗體后,F(xiàn)orm1隱藏,顯示Form2;單擊Form2窗體后,F(xiàn)orm2隱藏,F(xiàn)orm3顯示出來……,每個窗體顯示的大小和位置均相同。9.5.2控件參數(shù)和窗體

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論