讓電腦執行某些動作:撰寫第一個程序
更新:2007 年 11 月
在本課程中,您將學習如何建立「程序」,也就是可以從其他程式碼區塊執行的獨立程式碼區塊。然後,您將學習如何為程序建立「參數」。
程序就是一段程式碼,告訴程式執行某項動作。雖然您可能不知道,不過您已經在先前課程中使用過程序了。例如,MsgBox 函式就是內建的程序,可執行顯示對話方塊的動作。
雖然 Visual Basic 有很多內建程序可執行通用動作,可是總會有某些情況,您要程式執行一些內建程序無法處理的動作。例如,MsgBox 函式就無法顯示具有圖片的對話方塊。您必須撰寫自己的程序完成這項工作。
什麼是程序?
程序是獨立的程式碼區塊,可以從其他程式碼區塊執行。一般來說,每一個程序都包含完成一項工作所需的程式碼。例如,您可能會有名為 PlaySound 的程序,其中包含播放 WAV 檔所需的程式碼。雖然您可以在每次程式必須發出聲音時,即撰寫程式碼播放音效,但是建立一個程序,而能夠讓您從程式中任何一處呼叫,才是更合理的作法。
程序是透過在程式碼中「呼叫」來「執行」。例如,若要執行 PlaySound 程序,只要在程式中加入一行內容為程序名稱的程式碼即可,如下所示。
PlaySound()
就是這樣,簡單明瞭!當程式進行到該行時,就會跳到 PlaySound 程序,執行其中所包含的程式碼。然後程式會再跳回呼叫 PlaySound 的下一行。
您可以視需要呼叫任意數目的程序。程序是按呼叫的順序執行。例如,您可能也有名為 DisplayResults 的程序,若要讓它在執行 PlaySounds 程序之後執行,請如下所示呼叫該程序。
PlaySounds()
DisplayResults()
函式和子函數
程序有兩種類型:「函式」和「副程式」(有時稱為「子函數」(Sub))。函式會傳回值給呼叫它的程序,子函數則只會執行程式碼。在程式中加入包含子函數名稱的程式碼行,即可呼叫子函數,如以下範例所示。
DisplayResults
函式則不同,因為函式不僅執行程式碼,也傳回值。例如,想像一下稱為 GetDayOfWeek 的函式,它傳回 Integer,指出一週中的日子。您呼叫此函式的方法是:先宣告用以儲存傳回值的變數,然後指定傳回的值給變數,以備稍後使用,如下所示。
Dim Today As Integer
Today = GetDayOfWeek
在本範例中,由函式傳回的值複製至稱為 Today 的變數中儲存,供稍後使用。
撰寫程序
撰寫程序時,要先撰寫「程序宣告」。程序宣告會進行幾項工作。它會陳述程序是函式或子函數、為程序命名,而且會詳述程序應該具有的任何參數 (本課程稍後將會詳細討論參數)。下面是簡單的程序宣告範例。
Sub MyFirstSub()
End Sub
Sub 關鍵字會告訴程式,這個程序是子函數,將不會傳回值。後面接著子函數的名稱 (MyFirstSub),而空白括弧是表示這個程序沒有「參數」。最後,End Sub 關鍵字表示副程式結束。將由這個子函數執行的所有程式碼都在上述兩行之間。
宣告函式也很類似,只是多加一個步驟,必須指定傳回的型別 (例如 Integer、String 等等)。例如,傳回 Integer 的函式可能會如下所示。
Function MyFirstFunction() As Integer
End Function
As Integer 關鍵字表示,這個函式將傳回 Integer 值。若要從函式傳回值,請使用 Return 關鍵字,如下面範例所示。
Function GetTheNumberOne() As Integer
Return 1
End Function
這個程序將傳回數字 1。
試試看!
若要建立程序
在 [檔案] 功能表上,按一下 [新增專案]。
在 [新增專案] 對話方塊中,按一下 [範本] 窗格中的 [Windows 應用程式]。
在 [名稱] 方塊中,輸入 MyFirstProcedure,再按 [確定]。
會開啟新的 Windows Form 專案。
按兩下這份表單,開啟 [程式碼編輯器]。
在 [程式碼編輯器] 中,找出 End Class 這行程式碼。這是構成表單的程式碼區段結尾。就在這行程式碼之前,加入以下程序:
Function GetTime() As String Return CStr(Now) End Function
這個函式會使用內建 Now 程序來接收目前時間,然後再使用 CStr 函式,將 Now 所傳回的值轉換成人們可讀取的 String。最後,該 String 值即傳回做為函式的結果。
在上一個步驟加入的函式上方加入下面這個 Sub。
Sub DisplayTime() MsgBox(GetTime) End Sub
這個子函數會呼叫 GetTime 函式,並在訊息方塊中顯示所傳回的結果。
最後,將一行程式碼加入呼叫 DisplayTime 子函數的 Form1_Load 事件處理常式,如下所示。
DisplayTime()
按 F5 執行程式。
程式開始時,即執行 Form1_Load 事件程序。此程序呼叫 DisplayTime 子函數,因此程式執行即跳至 DisplayTime 子函數程序。然後該子函數就呼叫 GetTime 函式,程式再跳至 GetTime 函式。此函式傳回表示時間的 String 給 DisplayTime 子函數程序,然後在訊息方塊中顯示該字串。子函數執行完成以後,程式繼續正常進行,並顯示表單。
函式和子函數中的參數
有時您也需要提供額外資訊給您的程序。例如,在 PlaySound 程序中,您可能會想要播放幾種不同音效的其中一種。您可以使用參數,提供與所要播放之音效有關的資訊。
參數其實跟變數很像。它們有型別,也有名稱,而且像變數一樣可以儲存資訊。它們的用法就跟程序中的變數一樣。參數與變數的兩個最大不同點在於:
參數是在程序宣告中宣告,不是在個別的程式碼行中宣告。
參數只能用在宣告它的程序之中。
參數是在程序宣告中,程序名稱之後的括弧之中宣告。As 關鍵字是用來宣告型別,而各參數的前面一般都會有 ByVal 關鍵字。如果您不加入這個關鍵字,Visual Basic 會自動為您加入,此關鍵字中有相當進階的功能,超出本課程的解說範圍之外。
以下是含有參數的子函數範例。
Sub PlaySound(ByVal SoundFile As String, ByVal Volume As Integer)
My.Computer.Audio.Play(SoundFile, Volume)
End Sub
您就可以呼叫子函數並指定參數的值,如下所示。
PlaySound("Startup.wav", 1)
您也可以透過跟子函數相同的方式,宣告函式的參數。
試試看!
若要建立含有參數的函式
在 [檔案] 功能表上,按一下 [新增專案]。
在 [新增專案] 對話方塊中,按一下 [範本] 窗格中的 [Windows 應用程式]。
在 [名稱] 方塊中,輸入 parameters,再按 [確定]。
會開啟新的 Windows Form 專案。
從 [工具箱] 中,將兩個 [Textbox] 控制項拖曳到表單內。
從 [工具箱] 中將 [按鈕] 控制項拖曳到表單內。
按兩下 [按鈕],開啟 [程式碼編輯器]。
在 Button1_Click 事件處理常式的 End Sub 程式碼行之後,立即加入以下程序:
Function AddTwoNumbers(ByVal N1 As Integer, ByVal N2 As Integer) _ As Integer Return N1 + N2 End Function
在 Button1_Click 程序中,加入下列程式碼:
Dim aNumber As Integer = CInt(Textbox1.Text) Dim bNumber As Integer = CInt(Textbox2.Text) MsgBox(AddTwoNumbers(aNumber, bNumber))
此程式碼會宣告兩個整數,並將兩個文字方塊中的文字轉換成整數值。然後再將這兩個值傳給 AddTwoNumbers 函式,並將傳回的值顯示於訊息方塊中。
請按 F5 執行程式。
在每個文字方塊中輸入數值,然後按一下按鈕。這兩個數字就會相加,並將結果顯示在訊息方塊中。
後續步驟
在本課程中,您了解到函式與子函數的差異,以及如何建立這兩種程序。您也學會如何呼叫程序,以及如何建立具有參數的程序。
在下一個課程中,您將學習如何使用 For...Next 陳述式,以重複執行動作。
下一個課程:讓程式重複相同動作:利用 For...Next 迴圈進行迴圈處理