1、再談Sub過程與Function過程的調(diào)用及使用
調(diào)用過程有很多方法,它們與過程的類型、位置以及在應(yīng)用程序中的使用方式有關(guān)。調(diào)用Sub過程與Function過程不同,在表達(dá)式中,調(diào)用Sub過程的是一個獨立的語句,而調(diào)用函數(shù)過程只是表達(dá)式的一部分。Sub過程還有一點與函數(shù)不一樣,它不會用名字返回一個值。而與Function過程一樣,Sub過程也可以修改傳遞給它們的任何變量的值。
(1)調(diào)用Sub過程
有兩種方法:
Call MyProc(FirstArgument,SecondArgument)
MyProc FirstArgument,SecondArgument
說明 當(dāng)使用Call語法時,參數(shù)必須在括號內(nèi)。若省略Call關(guān)鍵字,則也必須去掉參數(shù)兩邊的括號
(2)調(diào)用函數(shù)過程
方法一:通常,調(diào)用自定義的函數(shù)過程的方法和調(diào)用VB內(nèi)部函數(shù)過程的方法一樣,即在表達(dá)式中寫上名字。
方法二:也可以像調(diào)用Sub過程一樣調(diào)用Function 過程,如調(diào)用函數(shù)過程Year:
Call Year(Now)
Year Now
當(dāng)用這種方法調(diào)用函數(shù)時,放棄返回值。
一般來說,函數(shù)都賦值給某些變量或?qū)傩浴?BR> (3)調(diào)用其它模塊中的過程
在工程中的任何地方都能調(diào)用其它模塊中的公用過程。調(diào)用其它模塊中的過程的各種方法,取決于該過程是在窗體模塊中、類模塊中還是標(biāo)準(zhǔn)模塊中。
調(diào)用窗體模塊中的過程:
所有窗體模塊的外部調(diào)用過程必須指向包含此過程的窗體模塊。如在窗體模塊Form1中包含SomeSub過程,則可使用語句:“Call Form1.SomeSub(參數(shù)列表)”來調(diào)用Form1中的SomeSub過程。
調(diào)用類模塊中的過程:
類模塊中的過程與窗體中調(diào)用過程類似,在類模塊中調(diào)用過程要調(diào)用與過程一致并且指向類實例的變量。例如DemoClass是類Class1的實例:
Dim DemoClass as New Class1
DemoClass.SomeSub
但是不同于窗體的是,在引用一個類的實例時,不能用類名作限定符(如不能像窗體中用Form1.SomeSub那樣使用Class1.SomeSub),必須首先聲明類的實例為對象變量(如上面的DemoClass)并用該變量名引用它。
使用標(biāo)準(zhǔn)模塊中的過程:
如果過程名是惟一的,則不必在調(diào)用時加模塊名。無論是在模塊內(nèi),還是在模塊外調(diào)用,結(jié)果總會引用這個惟一過程。在整個應(yīng)用程序中,如果過程僅出現(xiàn)在一個地方,這個過程就是惟一的。
如果兩個以上的模塊都包含同名的過程,例如:對于在Module1和Module2中都有名為“CommonName”的過程,在調(diào)用該過程時,分兩種情況:
如果在同一模塊內(nèi)調(diào)用一個公共過程就會直接運行該模塊內(nèi)的過程。如在Module2中直接調(diào)用“CommonName”則運行Module2中的“CommonName”過程,而不是Module1中的“CommonName”過程。
如果在Module1中調(diào)用Module2中的“CommonName”過程,那就必須使用模塊名進(jìn)行限定,要用語句:Module2.CommonName(參數(shù)列表)。
在下面的練習(xí)中,將在前面的“幸運7”程序中添加一個函數(shù),用來計算游戲中的獲勝率(Spin中出現(xiàn)一個或多個7的百分比)。為此,可在標(biāo)準(zhǔn)模塊中增加一個名為Rate的函數(shù)和一個名為Spins的公用變量。然后每次單擊“開始”按鈕時都調(diào)用Rate函數(shù)。還要在窗體上新創(chuàng)建的標(biāo)簽中顯示計算結(jié)果。
在窗體上再添加一個標(biāo)簽,Name屬性為“l(fā)blRate”、Caption屬性為“0.0%”、ForeColor是“紅色”,圖像框的“Stretch”屬性仍設(shè)置為True。
界面如下:
在標(biāo)準(zhǔn)模塊窗口中鍵入如下代碼(增加一個名為Rate的函數(shù)和一個名為Spins的公用變量):
Option Explicit
Public Wins
Public Spins '再定義一個公用變量,用來記錄產(chǎn)生隨機數(shù)的總數(shù),即單擊按鈕的次數(shù)。
--------------------------------------------------------------------------------
Function Rate(Hits, Attempts) As String '建立一個名為Rate的函數(shù)
Dim Percent
Percent = Hits / Attempts
Rate = Format(Percent, "0.0%")
End Function
說明:Rate函數(shù)通過將Hits參數(shù)除以Attempts參數(shù)來確定獲勝率,然后通過使用Format(格式)函數(shù)調(diào)整顯示結(jié)果。Rate函數(shù)被聲明為字符串類型,原因在于Format(格式)函數(shù)的返回值是字符串。Hits參數(shù)和Attempts參數(shù)是這兩個變量的占位符,在函數(shù)調(diào)用過程中,它們將被傳遞給函數(shù)。Rate函數(shù)是通用的,可與任何數(shù)字或變量一同使用,而不僅限于Wins和Spins。
調(diào)出窗體代碼的Command1_Click事件過程。,在其中添加調(diào)用函數(shù)語句,如下:
Private Sub Command1_Click()
Randomize
Image1.Visible = False '隱藏硬幣圖像
Label1.Caption = Int(Rnd * 10) '得到隨機
Label2.Caption = Int(Rnd * 10)
Label3.Caption = Int(Rnd * 10)
Spins = Spins + 1
If (Label1.Caption = 7) Or (Label2.Caption = 7) _
Or (Label3.Caption = 7) Then
Image1.Visible = True
Beep '當(dāng)某個標(biāo)題為7時,顯示一堆硬幣并響鈴
Wins = Wins + 1 '記錄產(chǎn)生7的次數(shù)。
lblWins.Caption = "Wins:" & Wins
調(diào)用過程有很多方法,它們與過程的類型、位置以及在應(yīng)用程序中的使用方式有關(guān)。調(diào)用Sub過程與Function過程不同,在表達(dá)式中,調(diào)用Sub過程的是一個獨立的語句,而調(diào)用函數(shù)過程只是表達(dá)式的一部分。Sub過程還有一點與函數(shù)不一樣,它不會用名字返回一個值。而與Function過程一樣,Sub過程也可以修改傳遞給它們的任何變量的值。
(1)調(diào)用Sub過程
有兩種方法:
Call MyProc(FirstArgument,SecondArgument)
MyProc FirstArgument,SecondArgument
說明 當(dāng)使用Call語法時,參數(shù)必須在括號內(nèi)。若省略Call關(guān)鍵字,則也必須去掉參數(shù)兩邊的括號
(2)調(diào)用函數(shù)過程
方法一:通常,調(diào)用自定義的函數(shù)過程的方法和調(diào)用VB內(nèi)部函數(shù)過程的方法一樣,即在表達(dá)式中寫上名字。
方法二:也可以像調(diào)用Sub過程一樣調(diào)用Function 過程,如調(diào)用函數(shù)過程Year:
Call Year(Now)
Year Now
當(dāng)用這種方法調(diào)用函數(shù)時,放棄返回值。
一般來說,函數(shù)都賦值給某些變量或?qū)傩浴?BR> (3)調(diào)用其它模塊中的過程
在工程中的任何地方都能調(diào)用其它模塊中的公用過程。調(diào)用其它模塊中的過程的各種方法,取決于該過程是在窗體模塊中、類模塊中還是標(biāo)準(zhǔn)模塊中。
調(diào)用窗體模塊中的過程:
所有窗體模塊的外部調(diào)用過程必須指向包含此過程的窗體模塊。如在窗體模塊Form1中包含SomeSub過程,則可使用語句:“Call Form1.SomeSub(參數(shù)列表)”來調(diào)用Form1中的SomeSub過程。
調(diào)用類模塊中的過程:
類模塊中的過程與窗體中調(diào)用過程類似,在類模塊中調(diào)用過程要調(diào)用與過程一致并且指向類實例的變量。例如DemoClass是類Class1的實例:
Dim DemoClass as New Class1
DemoClass.SomeSub
但是不同于窗體的是,在引用一個類的實例時,不能用類名作限定符(如不能像窗體中用Form1.SomeSub那樣使用Class1.SomeSub),必須首先聲明類的實例為對象變量(如上面的DemoClass)并用該變量名引用它。
使用標(biāo)準(zhǔn)模塊中的過程:
如果過程名是惟一的,則不必在調(diào)用時加模塊名。無論是在模塊內(nèi),還是在模塊外調(diào)用,結(jié)果總會引用這個惟一過程。在整個應(yīng)用程序中,如果過程僅出現(xiàn)在一個地方,這個過程就是惟一的。
如果兩個以上的模塊都包含同名的過程,例如:對于在Module1和Module2中都有名為“CommonName”的過程,在調(diào)用該過程時,分兩種情況:
如果在同一模塊內(nèi)調(diào)用一個公共過程就會直接運行該模塊內(nèi)的過程。如在Module2中直接調(diào)用“CommonName”則運行Module2中的“CommonName”過程,而不是Module1中的“CommonName”過程。
如果在Module1中調(diào)用Module2中的“CommonName”過程,那就必須使用模塊名進(jìn)行限定,要用語句:Module2.CommonName(參數(shù)列表)。
在下面的練習(xí)中,將在前面的“幸運7”程序中添加一個函數(shù),用來計算游戲中的獲勝率(Spin中出現(xiàn)一個或多個7的百分比)。為此,可在標(biāo)準(zhǔn)模塊中增加一個名為Rate的函數(shù)和一個名為Spins的公用變量。然后每次單擊“開始”按鈕時都調(diào)用Rate函數(shù)。還要在窗體上新創(chuàng)建的標(biāo)簽中顯示計算結(jié)果。
在窗體上再添加一個標(biāo)簽,Name屬性為“l(fā)blRate”、Caption屬性為“0.0%”、ForeColor是“紅色”,圖像框的“Stretch”屬性仍設(shè)置為True。
界面如下:
在標(biāo)準(zhǔn)模塊窗口中鍵入如下代碼(增加一個名為Rate的函數(shù)和一個名為Spins的公用變量):
Option Explicit
Public Wins
Public Spins '再定義一個公用變量,用來記錄產(chǎn)生隨機數(shù)的總數(shù),即單擊按鈕的次數(shù)。
--------------------------------------------------------------------------------
Function Rate(Hits, Attempts) As String '建立一個名為Rate的函數(shù)
Dim Percent
Percent = Hits / Attempts
Rate = Format(Percent, "0.0%")
End Function
說明:Rate函數(shù)通過將Hits參數(shù)除以Attempts參數(shù)來確定獲勝率,然后通過使用Format(格式)函數(shù)調(diào)整顯示結(jié)果。Rate函數(shù)被聲明為字符串類型,原因在于Format(格式)函數(shù)的返回值是字符串。Hits參數(shù)和Attempts參數(shù)是這兩個變量的占位符,在函數(shù)調(diào)用過程中,它們將被傳遞給函數(shù)。Rate函數(shù)是通用的,可與任何數(shù)字或變量一同使用,而不僅限于Wins和Spins。
調(diào)出窗體代碼的Command1_Click事件過程。,在其中添加調(diào)用函數(shù)語句,如下:
Private Sub Command1_Click()
Randomize
Image1.Visible = False '隱藏硬幣圖像
Label1.Caption = Int(Rnd * 10) '得到隨機
Label2.Caption = Int(Rnd * 10)
Label3.Caption = Int(Rnd * 10)
Spins = Spins + 1
If (Label1.Caption = 7) Or (Label2.Caption = 7) _
Or (Label3.Caption = 7) Then
Image1.Visible = True
Beep '當(dāng)某個標(biāo)題為7時,顯示一堆硬幣并響鈴
Wins = Wins + 1 '記錄產(chǎn)生7的次數(shù)。
lblWins.Caption = "Wins:" & Wins