|
8.1 Sub過(guò)程
8.1.1 Sub過(guò)程的建立
1.定義Sub過(guò)程
過(guò)程定義的語(yǔ)法格式為:
[Static][Private][Public]Sub過(guò)程名 ([形參表])
語(yǔ)句塊1
[Exit Sub]
[語(yǔ)句塊2]
End Sub
說(shuō)明:
(1) Static:指定過(guò)程中的局部變量在內(nèi)存中的存儲(chǔ)方式。
(2) Private:表示Sub過(guò)程是私有的,只能被本模塊中的其他過(guò)程訪(fǎng)問(wèn),不能被其他模塊中的過(guò)程訪(fǎng)問(wèn)。
(3) Public:表示Sub過(guò)程是公有過(guò)程,可以在程序的任何地方調(diào)用它。若省略,則默認(rèn)為Public過(guò)程。
(4) 過(guò)程名:命名規(guī)則與變量命名規(guī)則相同。無(wú)參數(shù)時(shí),過(guò)程名后的括號(hào)不能省略。
(5) 形參表:含有在調(diào)用時(shí)傳送給該過(guò)程的簡(jiǎn)單變量名或數(shù)組名,各參數(shù)名之間用逗號(hào)隔開(kāi)。
(6) Exit Sub語(yǔ)句表示立即退出過(guò)程,一般出現(xiàn)在選擇結(jié)構(gòu)中。
(7) End Sub標(biāo)志著Sub過(guò)程的結(jié)束。
(8) Sub過(guò)程不能嵌套定義。
【例8.1】計(jì)算n!。
2.建立Sub過(guò)程
通用過(guò)程可以在標(biāo)準(zhǔn)模塊過(guò)程中建立,也可以在窗體模塊中建立。舉例說(shuō)明在標(biāo)準(zhǔn)模塊中建立通用過(guò)程,的兩種方法。
8.1.2 調(diào)用Sub過(guò)程
Sub過(guò)程的調(diào)用有兩種方法:使用Call語(yǔ)句;直接使用過(guò)程名。
1.Call語(yǔ)句調(diào)用Sub過(guò)程
格式:Call 過(guò)程名[(實(shí)際參數(shù))]
2.過(guò)程名作為一個(gè)語(yǔ)句來(lái)使用
與第一種方式相比,它有兩點(diǎn)不同:
(1) 去掉關(guān)鍵字Call:
(2) 去掉“實(shí)際參數(shù)”的括號(hào)。
【例8.2】編寫(xiě)一個(gè)計(jì)算矩形面積的Sub過(guò)程,然后調(diào)用該過(guò)程計(jì)算矩形面積。
8.1.3 調(diào)用過(guò)程與事件過(guò)程
舉例說(shuō)明過(guò)程調(diào)用。
1.在事件過(guò)程中調(diào)用另一個(gè)事件過(guò)程
Public Sub Command1_Click() 'Form2中的Command1的Click事件過(guò)程
Form1.Command1_Click '調(diào)用Form1中的Command1的Click事件過(guò)程
End Sub
2.在同一事件過(guò)程中調(diào)用兩個(gè)標(biāo)準(zhǔn)模塊中具有相同名字的通用過(guò)程
Public Sub Command1_Click() 'Form1中的Command1的Click事件過(guò)程
Module1.Proce '調(diào)用標(biāo)準(zhǔn)模塊Module1中的名為Proce的通用過(guò)程
Module2.Proce '調(diào)用標(biāo)準(zhǔn)模塊Module2中的名為Proce的通用過(guò)程
End Sub
一般來(lái)說(shuō),通用過(guò)程(包括Sub過(guò)程、Function過(guò)程)之間、事件過(guò)程之間、通用過(guò)程與事件過(guò)程之間,都可以相互調(diào)用。當(dāng)在一個(gè)模塊中調(diào)用其他模塊中的過(guò)程時(shí),被調(diào)用的過(guò)程必須是“公用的”(Public)。
8.2 Function過(guò)程
8.2.1 Function過(guò)程的定義
Function過(guò)程定義的格式為
[Static][Private][Public]Function函數(shù)名([形參表]) [As類(lèi)型]
[語(yǔ)句塊]
[函數(shù)名=表達(dá)式]
[Exit Function]
[語(yǔ)句塊]
End Function
說(shuō)明:
(1) Function過(guò)程以Function開(kāi)頭,以End Function結(jié)束,在兩者之間是描述過(guò)程操作的語(yǔ)句塊,即“過(guò)程體”或“函數(shù)體”。
(2) 函數(shù)名即函數(shù)過(guò)程的名稱(chēng),命名規(guī)則與變量相同。
(3) 表達(dá)式的值是函數(shù)返回的結(jié)果,通過(guò)賦值語(yǔ)句將其賦給函數(shù)名。
(4)不能在事件過(guò)程中定義通用過(guò)程(包括Sub過(guò)程和Function過(guò)程),只能在事件過(guò)程內(nèi)調(diào)用通用過(guò)程。
【例8.3】編寫(xiě)一個(gè)求最大公約數(shù)的函數(shù)過(guò)程。
8.2.2 調(diào)用Function過(guò)程
以調(diào)用求最大公約數(shù)的函數(shù)為例說(shuō)明可以像使用Visual Basic內(nèi)部函數(shù)一樣來(lái)調(diào)用Function過(guò)程。
8.3 參數(shù)傳送
8.3.1 參數(shù)傳送方式
舉例說(shuō)明參數(shù)傳送方式。
1.傳值
【例8.4】編寫(xiě)程序,試驗(yàn)按值傳遞
Sub tryout(ByVal x As Integer,ByVal y As Integer)
x=x+100
y=y*6
Print"x=";x."y=";y
End Sub
Sub Form_Click()
Dim a As Integer, b As Integer
a=10:b=20
tryout a,b
Print "a=";a, "b=";b
End Sub
程序運(yùn)行后,輸出結(jié)果如下:
x=110 y=120
a=10 b=20
2.傳地址
【例8.5】編寫(xiě)程序,試驗(yàn)引用方式傳送參數(shù)。
Sub tryout(x As Integer ,y As Integer)
x=x+100
y=y*6
Print "x=";x, "y=";y
End Sub
Sub Form_Click()
Dim a As Integer, b As Integer
a=10:b=20
tryout a,b
Print "a=";a, "b=";b
End Sub
小結(jié):
在Visual Basic中,常用的過(guò)程主要有兩類(lèi):一類(lèi)由系統(tǒng)提供,包括事件過(guò)程和內(nèi)部函數(shù)過(guò)程;另一類(lèi)是自定義過(guò)程,由程序設(shè)計(jì)者根據(jù)需要自行編制,主要包括通用過(guò)程和自定義函數(shù)過(guò)程。事件過(guò)程和通用過(guò)程合稱(chēng)為子過(guò)程(Sub過(guò)程),自定義函數(shù)過(guò)程簡(jiǎn)稱(chēng)為函數(shù)過(guò)程(Function過(guò)程)。
當(dāng)在程序中需要多次用到某一公式或處理某一函數(shù)關(guān)系,而又沒(méi)有現(xiàn)成的內(nèi)部函數(shù)能夠使用時(shí),可以用Function語(yǔ)句編寫(xiě)自定義函數(shù)過(guò)程實(shí)現(xiàn)相應(yīng)的功能。一旦編寫(xiě)完成后,在程序中就可以像使用內(nèi)部函數(shù)一樣使用Function過(guò)程。Function過(guò)程也是一個(gè)獨(dú)立的過(guò)程,但與Sub過(guò)程不同,Sub過(guò)程沒(méi)有返回值,只能作為獨(dú)立的基本語(yǔ)句被調(diào)用,不能出現(xiàn)在表達(dá)式中;而Function過(guò)程有返回值,既可出現(xiàn)在表達(dá)式中,也可以作為獨(dú)立的語(yǔ)句被調(diào)用。
參數(shù)是主調(diào)過(guò)程和被調(diào)過(guò)程之間傳送數(shù)據(jù)的重要手段。在調(diào)用一個(gè)過(guò)程時(shí),必須把實(shí)際參數(shù)傳送給過(guò)程,完成形式參數(shù)與實(shí)際參數(shù)的結(jié)合,然后用實(shí)際參數(shù)執(zhí)行調(diào)用的過(guò)程。
本講重點(diǎn)介紹Sub過(guò)程和Function過(guò)程的結(jié)構(gòu)框架如何定義,以及如何調(diào)用一個(gè)已寫(xiě)好的自定義過(guò)程,進(jìn)而介紹過(guò)程調(diào)用的參數(shù)傳遞機(jī)制。
作業(yè):
1.Sub過(guò)程和Function過(guò)程有何區(qū)別?
2.怎樣創(chuàng)建Sub過(guò)程和Function過(guò)程?
3.怎樣調(diào)用Sub過(guò)程和Function過(guò)程?
4.什么是形參?什么是實(shí)參?它們之間有何區(qū)別?
5.什么是值傳遞?什么是地址傳遞?它們之間有何區(qū)別?
|