【正文】
本例采用 InputBox函數(shù)來(lái)輸入字符,判斷后結(jié)果直接輸出在窗體上。 [ByVal |ByRef] 變量名 [( )][As 數(shù)據(jù)類(lèi)型 ] … ByVal表示該參數(shù)按值傳遞, ByRef表示該參數(shù)按地址傳遞 子過(guò)程執(zhí)行完后,會(huì)返回事件過(guò)程中調(diào)用語(yǔ)句 Call的后續(xù)語(yǔ)句繼續(xù)執(zhí)行 通用過(guò)程又分為 Sub(子程序 )過(guò)程和 Function(函數(shù) )過(guò)程 調(diào)用過(guò)程 …… Call SubA …… Call SubA …… Call SubB …… 子過(guò)程 SubA 子過(guò)程 SubB 通用過(guò)程 例 使用 Sub過(guò)程的示例 1 Private Sub Form_Load() Show Call mysub1(30) Call mysub2 Call mysub2 Call mysub2 Call mysub1(30) End Sub 程序運(yùn)行結(jié)果 Private Sub mysub1(n) Print String(n, *) End Sub Private Sub mysub2() Print *。 本章主要內(nèi)容 Sub過(guò)程 /Function 多窗體與 Sub Main 第 7章 過(guò) 程 VB應(yīng)用程序是由過(guò)程組成的,過(guò)程是完成某種特殊功能的一組獨(dú)立的程序代碼。 Tab(30)。 通過(guò)參數(shù)表傳送參數(shù) Sub過(guò)程可以獲取調(diào)用過(guò)程傳送的參數(shù),也能通過(guò)參數(shù)表的參數(shù),把計(jì)算結(jié)果傳回給調(diào)用過(guò)程 1. Sub過(guò)程的定義 Sub過(guò)程可以保存在兩種模塊中: 窗體模塊 (.frm)和 標(biāo)準(zhǔn)模塊 (.bas) 可以在代碼窗口中直接鍵入來(lái)創(chuàng)建 Sub過(guò)程 選擇“工具”菜單中的“添加過(guò)程”命令 2. Sub過(guò)程的建立 事件過(guò)程是通過(guò)事件驅(qū)動(dòng)和由 系統(tǒng)自動(dòng)調(diào)用 的,而 Sub過(guò)程則 必須通過(guò)調(diào)用語(yǔ)句實(shí)行調(diào)用 調(diào)用 Sub過(guò)程有以下兩種方法: (1)使用 Call語(yǔ)句 Call 過(guò)程名 ([實(shí)參表] ) (2)直接使用過(guò)程名 過(guò)程名[實(shí)參表] 例如,調(diào)用名為 SubCal Call SubCal(10) SubCal 10 3. Sub過(guò)程的調(diào)用 Private Sub Form_Load() Show Print VB的基本特點(diǎn)是: Call Sub_Cont Print 面向?qū)ο蟮目梢暬幊? Call Sub_Cont Print 事件驅(qū)動(dòng)的編程機(jī)制 Call Sub_Cont Print 結(jié)構(gòu)化的設(shè)計(jì)語(yǔ)言 End Sub 在事件過(guò)程 Form_Load()中,有三處調(diào)用 Sub過(guò)程 Sub_Cont() Private Sub Sub_Cont() Dim resp As String Do While True resp = InputBox(是否繼續(xù) (y/n) ? ) If UCase(resp) = N Then End If UCase(resp) = Y Then Exit Do Loop End Sub 例 使用 Sub過(guò)程示例 2 因?yàn)橛?jì)算 5!和 10!都要用到階乘 n! (n!= 1 2 3 … n) 所以把計(jì)算 n!編成 Sub過(guò)程 采用 Print直接在窗體上輸出結(jié)果,程序代碼: Private Sub Form_Load() Show Dim y As Long, s As Long Call Jc(5, y) s = y Call Jc(10, y) s = s + y Print 5! + 10! =。 例 判斷輸入字符是不是英文字母 Private Sub Form_Load() Dim s As String Show s = InputBox(請(qǐng)輸入一個(gè)字符 ) If Checha(s) Then Print ***輸入的字符是英文字母 *** Else Print ***輸入的字符不是英文字母 *** End If End Sub Function Checha(inp As String) As Boolean Dim upalp As String upalp = UCase(inp) If A = upalp And upalp = Z Then Checha = True Else Checha = False End If End Function 查看當(dāng)前模塊中有哪些 Sub過(guò)程和 Function過(guò)程 。 n + 1 amp。 min End Sub Sub Caljc(k As Integer, darray() As Integer, _ s As Long, m As Integer, n As Integer) Dim i As Integer s = darray(1) : m = darray(1) : n = darray(1) If k = 1 Then Exit Sub For i = 2 To k s = s + darray(i) If m darray(i) Then m = darray(i) If n darray(i) Then n = darray(i) Next i End Sub 1. 按地址傳遞 VB默認(rèn)的數(shù)據(jù)傳遞方式 按地址傳遞 (關(guān)鍵字 ByRef):把實(shí)參變量的內(nèi)存地址傳遞給被調(diào)過(guò)程 (如 Sub過(guò)程 ),即 形參與實(shí)參使用相同的內(nèi)存地址單元 ,這樣通過(guò)過(guò)程就可以改變變量本身的值 例 , Form_Load()事件過(guò)程是通過(guò)“ Call Jc(5,y)”和“ Call Jc(10,y)”來(lái)調(diào)用過(guò)程 Jc(n,t)的,其中采用的第二個(gè)參數(shù)就是按地址來(lái)傳送數(shù)據(jù)的 按地址傳遞和按值傳遞 按值傳遞 (關(guān)鍵字 ByVal):通過(guò)常量傳遞實(shí)際參數(shù),即 傳遞參數(shù)值而不是傳遞它的地址 因?yàn)橥ㄓ眠^(guò)程不能訪問(wèn)實(shí)參的內(nèi)存地址,因而在通用過(guò)程中對(duì)形參的任何操作都不會(huì)影響實(shí)參 2. 按值傳遞 設(shè)置兩個(gè)通用過(guò)程 Test1和 Test2,分別按值傳遞和按地址傳遞 Private Sub Form_Load() Dim x As Integer Show x = 5 Print 執(zhí)行 test1前, x=。 Calb(n, m) End Sub Private Function Calb(n, m) Calb = Jc(n) / (Jc(m) * Jc(n m)) End Function Private Function Jc(x) t = 1 For i = 1 To x t = t * i Next i Jc = t End Function 程序中,采用了過(guò)程的嵌套調(diào)用方式。 m End Sub Private Function fac(n) As Double If n 1 Then fac = n * fac(n 1) 39。以后再逐層返回,遞推出 Fac(2)及 Fac(3)的值 注意,在某次調(diào)用 Fac過(guò)程時(shí)并不是立即得到 Fac(n)的值,而是一次又一次地進(jìn)行遞歸調(diào)用,到 Fac(1)時(shí)才有確定的值,然后通用過(guò)程逐層返回中依次算出 Fac(2)、 Fac(3)的值 Form_Load過(guò)程 m=Fac(3) Fac過(guò)程 調(diào)用 Fac(3)值 為 6 參數(shù) n為 3