第5章 過(guò)程與函數(shù)_第1頁(yè)
第5章 過(guò)程與函數(shù)_第2頁(yè)
第5章 過(guò)程與函數(shù)_第3頁(yè)
第5章 過(guò)程與函數(shù)_第4頁(yè)
第5章 過(guò)程與函數(shù)_第5頁(yè)
已閱讀5頁(yè),還剩62頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第5章 過(guò)程與函數(shù)1 掌握掌握Sub子程序和子程序和Function函數(shù)過(guò)程的定義和調(diào)函數(shù)過(guò)程的定義和調(diào)用方法;用方法;掌握傳址和傳值兩種參數(shù)傳遞方式的區(qū)別及其掌握傳址和傳值兩種參數(shù)傳遞方式的區(qū)別及其用途;用途;熟悉數(shù)組參數(shù)的使用方法;熟悉數(shù)組參數(shù)的使用方法;了解過(guò)程的嵌套調(diào)用和遞歸調(diào)用的執(zhí)行過(guò)程;了解過(guò)程的嵌套調(diào)用和遞歸調(diào)用的執(zhí)行過(guò)程;掌握過(guò)程作用域的有關(guān)概念;掌握過(guò)程作用域的有關(guān)概念;掌握變量的作用域和生存期掌握變量的作用域和生存期 本章要求:本章要求:第六章 過(guò)程與函數(shù) 第5章 過(guò)程與函數(shù)2本章重點(diǎn):本章重點(diǎn): Sub過(guò)程及過(guò)程及Function過(guò)程的定義與調(diào)用過(guò)程的定義與調(diào)用; 過(guò)程調(diào)

2、用中數(shù)據(jù)的傳遞。過(guò)程調(diào)用中數(shù)據(jù)的傳遞。本章難點(diǎn):本章難點(diǎn):過(guò)程調(diào)用中數(shù)據(jù)的傳遞。過(guò)程調(diào)用中數(shù)據(jù)的傳遞。第六章 過(guò) 程 第5章 過(guò)程與函數(shù)35.1 過(guò)程概述過(guò)程概述在在VB5.0/6.0中,除了系統(tǒng)提供的內(nèi)部函數(shù)過(guò)程和中,除了系統(tǒng)提供的內(nèi)部函數(shù)過(guò)程和事件過(guò)程外,用戶(hù)可自定義過(guò)程下列四種過(guò)程:事件過(guò)程外,用戶(hù)可自定義過(guò)程下列四種過(guò)程: “Sub” 保留字開(kāi)始的為子過(guò)程保留字開(kāi)始的為子過(guò)程“Function” 保留字開(kāi)始的為函數(shù)過(guò)程保留字開(kāi)始的為函數(shù)過(guò)程 “Property”保留字開(kāi)始的為屬性過(guò)程保留字開(kāi)始的為屬性過(guò)程“Event”保留字開(kāi)始保留字開(kāi)始的事件過(guò)程的事件過(guò)程第5章 過(guò)程與函數(shù)4 在在V

3、B中,的中,的Sub子過(guò)程分為:子過(guò)程分為:事件過(guò)程和通用過(guò)程事件過(guò)程和通用過(guò)程 5.2.1 事件過(guò)程事件過(guò)程 (1)窗體事件的語(yǔ)法)窗體事件的語(yǔ)法Private Sub Form_事件名事件名(參數(shù)列表參數(shù)列表) 語(yǔ)句組語(yǔ)句組End Sub (2)控件事件的語(yǔ)法)控件事件的語(yǔ)法Private Sub 控件名控件名_事件名事件名(參數(shù)列表參數(shù)列表) 語(yǔ)句組語(yǔ)句組 End Sub5.2 Sub過(guò)程過(guò)程第5章 過(guò)程與函數(shù)5子過(guò)程的定義形式如下:子過(guò)程的定義形式如下:Public|PrivateStatic Sub 子過(guò)程名子過(guò)程名(形參表形參表) 語(yǔ)句組語(yǔ)句組 Exit Sub 語(yǔ)句組語(yǔ)句組End

4、 Sub 5.2.2 通用過(guò)程(通用過(guò)程(Sub過(guò)程)的定義過(guò)程)的定義 說(shuō)明:說(shuō)明:(1)子過(guò)程名:子過(guò)程名:命名規(guī)則與變量名規(guī)則相同。命名規(guī)則與變量名規(guī)則相同。子過(guò)程名不返回值,而是通過(guò)形參與實(shí)參的傳遞得到結(jié)果,子過(guò)程名不返回值,而是通過(guò)形參與實(shí)參的傳遞得到結(jié)果,調(diào)用時(shí)可返回多個(gè)值。調(diào)用時(shí)可返回多個(gè)值。5.2 Sub過(guò)程過(guò)程第5章 過(guò)程與函數(shù)6(2)形式參數(shù)列表:形式參數(shù)列表:形式參數(shù)通常簡(jiǎn)稱(chēng)形式參數(shù)通常簡(jiǎn)稱(chēng)“形參形參”,僅表示,僅表示形參的類(lèi)型、個(gè)數(shù)、位置,定義時(shí)是無(wú)值的,只有在過(guò)程被形參的類(lèi)型、個(gè)數(shù)、位置,定義時(shí)是無(wú)值的,只有在過(guò)程被調(diào)用時(shí),虛實(shí)參結(jié)合后才獲得相應(yīng)的值。調(diào)用時(shí),虛實(shí)參結(jié)

5、合后才獲得相應(yīng)的值。(3)過(guò)程可以無(wú)形式參數(shù),但括號(hào)不能省。過(guò)程可以無(wú)形式參數(shù),但括號(hào)不能省。(4)參數(shù)的定義形式:參數(shù)的定義形式:ByValByRef變量名變量名( )As 類(lèi)型類(lèi)型,,ByVal表示當(dāng)該過(guò)程被調(diào)用時(shí),參數(shù)是按值傳遞的;缺省或表示當(dāng)該過(guò)程被調(diào)用時(shí),參數(shù)是按值傳遞的;缺省或ByRef表示當(dāng)該過(guò)程被調(diào)用時(shí),參數(shù)是按地址傳遞的。表示當(dāng)該過(guò)程被調(diào)用時(shí),參數(shù)是按地址傳遞的。 5.2 Sub過(guò)程過(guò)程第5章 過(guò)程與函數(shù)7例例5.1 編一個(gè)交換兩個(gè)整型變量值的子過(guò)程。編一個(gè)交換兩個(gè)整型變量值的子過(guò)程。Private Sub Swap( X As Integer, Y As Integer)D

6、im temp As Integer Temp=X : X=Y : Y=TempEnd Sub5.2 Sub過(guò)程過(guò)程Private Sub command1_click()Dim a%,b% a=val(inputbox(“a=“) b=val(inputbox(“b=“) print “a=“;a,”b=“,b call swap(a,b) print “a=“;a,”b=“,bEnd Sub第5章 過(guò)程與函數(shù)85.2.3 子過(guò)程的建立子過(guò)程的建立 通過(guò)通過(guò) “工具工具”菜單中的菜單中的“添加過(guò)程添加過(guò)程”命令,出現(xiàn)命令,出現(xiàn)“添加添加過(guò)程過(guò)程”對(duì)話框(見(jiàn)圖對(duì)話框(見(jiàn)圖5.1),選擇過(guò)程類(lèi)型

7、(子過(guò)程、函數(shù)、),選擇過(guò)程類(lèi)型(子過(guò)程、函數(shù)、屬性、事件)及作用范圍(公有的屬性、事件)及作用范圍(公有的Public、私有的、私有的Private),),單擊確定后得到一個(gè)過(guò)程或函數(shù)定義的結(jié)構(gòu)框架(模板),單擊確定后得到一個(gè)過(guò)程或函數(shù)定義的結(jié)構(gòu)框架(模板),如:如:Public Sub Sort( ) End Sub5.2 Sub過(guò)程過(guò)程第5章 過(guò)程與函數(shù)95.2.4 過(guò)程的調(diào)用過(guò)程的調(diào)用 1、子過(guò)程的調(diào)用、子過(guò)程的調(diào)用 子過(guò)程名子過(guò)程名 參數(shù)列表參數(shù)列表 或或 Call 子過(guò)程名子過(guò)程名(參數(shù)列表參數(shù)列表)說(shuō)明:說(shuō)明: (1)參數(shù)列表參數(shù)列表稱(chēng)為實(shí)參或?qū)嵲仨毰c形參保持個(gè)數(shù)稱(chēng)為實(shí)參或

8、實(shí)元,它必須與形參保持個(gè)數(shù)相同,位置與類(lèi)型一一對(duì)應(yīng)。相同,位置與類(lèi)型一一對(duì)應(yīng)。 (2)調(diào)用時(shí)把實(shí)參值傳遞給對(duì)應(yīng)的形參。其中值傳遞)調(diào)用時(shí)把實(shí)參值傳遞給對(duì)應(yīng)的形參。其中值傳遞(形參前有(形參前有ByVal說(shuō)明)時(shí)實(shí)參的值不隨形參的值變化而改變。說(shuō)明)時(shí)實(shí)參的值不隨形參的值變化而改變。而地址傳遞時(shí)實(shí)參的值隨形參值的改變而改變。而地址傳遞時(shí)實(shí)參的值隨形參值的改變而改變。5.2 Sub過(guò)程過(guò)程第5章 過(guò)程與函數(shù)10 (3)當(dāng)參數(shù)是數(shù)組時(shí),形參與實(shí)參在參數(shù)聲明時(shí)應(yīng)省略)當(dāng)參數(shù)是數(shù)組時(shí),形參與實(shí)參在參數(shù)聲明時(shí)應(yīng)省略其維數(shù),但括號(hào)不能省。其維數(shù),但括號(hào)不能省。 (4)調(diào)用子過(guò)程的形式有兩種,用)調(diào)用子過(guò)程的

9、形式有兩種,用Call關(guān)鍵字時(shí),實(shí)參關(guān)鍵字時(shí),實(shí)參必須加圓括號(hào)括起,反之則實(shí)參之間用必須加圓括號(hào)括起,反之則實(shí)參之間用“,”分隔。分隔。 例:調(diào)用上面定義的例:調(diào)用上面定義的Swap子過(guò)程的形式:子過(guò)程的形式: Swap a,b Call Swap(a,b)5.2 Sub過(guò)程過(guò)程第5章 過(guò)程與函數(shù)11Private Sub CmdOK() Call Swap(a,b) Swap a,bEnd SubPrivate Sub Swap(x%,y%) Dim temp% Temp=X X=Y Y=TempEnd Sub 過(guò)程調(diào)用的執(zhí)行過(guò)程:過(guò)程調(diào)用的執(zhí)行過(guò)程:5.2 Sub過(guò)程過(guò)程第5章 過(guò)程與函數(shù)

10、125.3 Function過(guò)程過(guò)程 Visual Basic函數(shù)分為內(nèi)部函數(shù)和外部函數(shù),外部函數(shù)是函數(shù)分為內(nèi)部函數(shù)和外部函數(shù),外部函數(shù)是用戶(hù)根據(jù)需要用用戶(hù)根據(jù)需要用Function關(guān)鍵字定義的函數(shù)過(guò)程,關(guān)鍵字定義的函數(shù)過(guò)程,與子過(guò)程與子過(guò)程不同的是函數(shù)過(guò)程將返回一個(gè)值不同的是函數(shù)過(guò)程將返回一個(gè)值 。 5.3.1 函數(shù)過(guò)程(函數(shù)過(guò)程(Function過(guò)程)的定義過(guò)程)的定義Public|PrivateStaticFunction 函數(shù)名函數(shù)名()As 函數(shù)名函數(shù)名=返回值返回值 Exit Function 函數(shù)名函數(shù)名=返回值返回值 End Function函數(shù)體第5章 過(guò)程與函數(shù)13說(shuō)明:說(shuō)

11、明: (1)函數(shù)名:函數(shù)名:命名規(guī)則與變量名規(guī)則相同。命名規(guī)則與變量名規(guī)則相同。 (2)在函數(shù)體內(nèi),函數(shù)名可以當(dāng)變量使用,函數(shù)的返回值)在函數(shù)體內(nèi),函數(shù)名可以當(dāng)變量使用,函數(shù)的返回值就是通過(guò)對(duì)函數(shù)名的賦值語(yǔ)句來(lái)實(shí)現(xiàn)的,就是通過(guò)對(duì)函數(shù)名的賦值語(yǔ)句來(lái)實(shí)現(xiàn)的,在函數(shù)過(guò)程中至少要在函數(shù)過(guò)程中至少要對(duì)函數(shù)名賦值一次。對(duì)函數(shù)名賦值一次。 (3)AS類(lèi)型:類(lèi)型:是指函數(shù)返回值的類(lèi)型,若省略,則函數(shù)返是指函數(shù)返回值的類(lèi)型,若省略,則函數(shù)返回變體類(lèi)型值(回變體類(lèi)型值(Variant)。)。 (4)Exit Function:表示退出函數(shù)過(guò)程,常常是與選擇結(jié):表示退出函數(shù)過(guò)程,常常是與選擇結(jié)構(gòu)(構(gòu)(If或或Sel

12、ect Case語(yǔ)句)聯(lián)用,即當(dāng)滿(mǎn)足一定條件時(shí),退出語(yǔ)句)聯(lián)用,即當(dāng)滿(mǎn)足一定條件時(shí),退出函數(shù)過(guò)程。函數(shù)過(guò)程。 (5)形參數(shù)列表形參數(shù)列表:形參的定義與子過(guò)程完全相同。:形參的定義與子過(guò)程完全相同。 例例5.2 5.3 Function過(guò)程過(guò)程第5章 過(guò)程與函數(shù)145.3.2 函數(shù)的調(diào)用函數(shù)的調(diào)用調(diào)用形式如下:調(diào)用形式如下: 函數(shù)名(實(shí)參列表)函數(shù)名(實(shí)參列表)說(shuō)明:說(shuō)明: 在調(diào)用時(shí)實(shí)參和形參的數(shù)據(jù)類(lèi)型、順序、個(gè)數(shù)必須在調(diào)用時(shí)實(shí)參和形參的數(shù)據(jù)類(lèi)型、順序、個(gè)數(shù)必須匹配。函數(shù)調(diào)用只能出現(xiàn)在表達(dá)式中,其功能是求得函匹配。函數(shù)調(diào)用只能出現(xiàn)在表達(dá)式中,其功能是求得函數(shù)的返回值。數(shù)的返回值。例例5.3 5.

13、3 Function過(guò)程過(guò)程第5章 過(guò)程與函數(shù)155.4 過(guò)程之間參數(shù)的傳遞過(guò)程之間參數(shù)的傳遞Visual Basic中不同模塊(過(guò)程)之間數(shù)據(jù)的傳遞有兩種方式:中不同模塊(過(guò)程)之間數(shù)據(jù)的傳遞有兩種方式: 通過(guò)過(guò)程調(diào)用實(shí)參與形參的結(jié)合實(shí)現(xiàn);通過(guò)過(guò)程調(diào)用實(shí)參與形參的結(jié)合實(shí)現(xiàn);使用全局變量來(lái)實(shí)現(xiàn)各過(guò)程中共享數(shù)據(jù)。使用全局變量來(lái)實(shí)現(xiàn)各過(guò)程中共享數(shù)據(jù)。 5.4.1 5.4.1 形式參數(shù)與實(shí)際參數(shù)形式參數(shù)與實(shí)際參數(shù)1、形式參數(shù)、形式參數(shù) 是指在定義通用過(guò)程時(shí),出現(xiàn)在是指在定義通用過(guò)程時(shí),出現(xiàn)在Sub或或Function語(yǔ)句中語(yǔ)句中的的變量名后面園括號(hào)內(nèi)的數(shù)變量名后面園括號(hào)內(nèi)的數(shù),是用來(lái)接收傳送給子過(guò)程

14、的是用來(lái)接收傳送給子過(guò)程的數(shù)據(jù)數(shù)據(jù),形參表中的各個(gè)變量之間用逗號(hào)分隔。,形參表中的各個(gè)變量之間用逗號(hào)分隔。 第5章 過(guò)程與函數(shù)162、實(shí)際參數(shù)、實(shí)際參數(shù) 實(shí)際參數(shù)是指在調(diào)用實(shí)際參數(shù)是指在調(diào)用Sub或或Function過(guò)程時(shí),寫(xiě)入子過(guò)程過(guò)程時(shí),寫(xiě)入子過(guò)程名或函數(shù)名后括號(hào)內(nèi)的參數(shù),其作用是名或函數(shù)名后括號(hào)內(nèi)的參數(shù),其作用是將它們的數(shù)據(jù)(數(shù)值或?qū)⑺鼈兊臄?shù)據(jù)(數(shù)值或地址)傳送給地址)傳送給Sub或或Function過(guò)程與其對(duì)應(yīng)的形參變量。過(guò)程與其對(duì)應(yīng)的形參變量。 實(shí)參可由常量、表達(dá)式、有效的變量名、數(shù)組名(后加左、實(shí)參可由常量、表達(dá)式、有效的變量名、數(shù)組名(后加左、右括號(hào),如右括號(hào),如A( ))組成,

15、實(shí)參表中各參數(shù)用逗號(hào)分隔。)組成,實(shí)參表中各參數(shù)用逗號(hào)分隔。5.4.2 參數(shù)傳遞(虛實(shí)結(jié)合)參數(shù)傳遞(虛實(shí)結(jié)合) 參數(shù)傳遞指主調(diào)過(guò)程的實(shí)參(調(diào)用時(shí)參數(shù)傳遞指主調(diào)過(guò)程的實(shí)參(調(diào)用時(shí)已有確定值和內(nèi)存已有確定值和內(nèi)存地址的參數(shù)地址的參數(shù))傳遞給被調(diào)過(guò)程的形參,參數(shù)的傳遞有兩種方)傳遞給被調(diào)過(guò)程的形參,參數(shù)的傳遞有兩種方式:按值傳遞、按地址傳遞。形參前加式:按值傳遞、按地址傳遞。形參前加“ByVal”關(guān)鍵字的是關(guān)鍵字的是按按值傳遞值傳遞,缺省缺省或加或加“ByRef”關(guān)鍵字的為按關(guān)鍵字的為按地址傳遞地址傳遞。 5.4 過(guò)程之間參數(shù)的傳遞過(guò)程之間參數(shù)的傳遞第5章 過(guò)程與函數(shù)17 傳址與傳值傳址與傳值 傳

16、址:傳址: 形參得到的是實(shí)參的地址,當(dāng)形參值的改變同時(shí)形參得到的是實(shí)參的地址,當(dāng)形參值的改變同時(shí)也改變實(shí)參的值。也改變實(shí)參的值。 傳值:傳值: 形參得到的是實(shí)參的值,形參值的改變不會(huì)影響形參得到的是實(shí)參的值,形參值的改變不會(huì)影響實(shí)參的值。實(shí)參的值。Sub Swap2(x%, y%) Dim Temp% Temp = x: x = y: y = Temp End SubSub Swap1(ByVal x%, ByVal y%)Dim Temp% Temp = x: x = y: y = TempEnd Sub例例5.4 5.4 過(guò)程之間參數(shù)的傳遞過(guò)程之間參數(shù)的傳遞第5章 過(guò)程與函數(shù)18Priva

17、te Sub CmdOK_Click() Dim a%,b% a = 10: b = 20 Swap1 a, b 傳傳 值值 Print A1=; a, B1=; b a = 10: b = 20 Swap2 a, b 傳地址傳地址 Print A2=; a, B2=; bEnd SubSub Swap2(x%, y%) Dim Temp% Temp = x: x = y: y = Temp End SubSub Swap1(ByVal x%, ByVal y%) Dim Temp% Temp = x: x = y: y = TempEnd Sub5.4 過(guò)程之間參數(shù)的傳遞過(guò)程之間參數(shù)的傳遞第

18、5章 過(guò)程與函數(shù)19值傳遞的執(zhí)行過(guò)程如下圖:值傳遞的執(zhí)行過(guò)程如下圖:5.4 過(guò)程之間參數(shù)的傳遞過(guò)程之間參數(shù)的傳遞第5章 過(guò)程與函數(shù)20通過(guò)地址傳遞數(shù)據(jù)的執(zhí)行過(guò)程通過(guò)地址傳遞數(shù)據(jù)的執(zhí)行過(guò)程 5.4 過(guò)程之間參數(shù)的傳遞過(guò)程之間參數(shù)的傳遞第5章 過(guò)程與函數(shù)215.4.3 有關(guān)過(guò)程之間數(shù)據(jù)傳遞的幾點(diǎn)說(shuō)明有關(guān)過(guò)程之間數(shù)據(jù)傳遞的幾點(diǎn)說(shuō)明 1. .參數(shù)的數(shù)據(jù)類(lèi)型參數(shù)的數(shù)據(jù)類(lèi)型2. 按值傳遞參數(shù)按值傳遞參數(shù)3.3.按地址傳遞參數(shù)按地址傳遞參數(shù) 注意:注意:在子過(guò)程和函數(shù)過(guò)程調(diào)用時(shí),如果實(shí)參是常量在子過(guò)程和函數(shù)過(guò)程調(diào)用時(shí),如果實(shí)參是常量(包括系統(tǒng)常量、用(包括系統(tǒng)常量、用Const自定義的符號(hào)常量)或表達(dá)式,無(wú)

19、自定義的符號(hào)常量)或表達(dá)式,無(wú)論在定義時(shí)使用值傳遞還是地址傳遞,此時(shí)都是按值傳遞方論在定義時(shí)使用值傳遞還是地址傳遞,此時(shí)都是按值傳遞方式將常量或表達(dá)式計(jì)算的式將常量或表達(dá)式計(jì)算的值傳遞給形參變量值傳遞給形參變量。 如果形參定義是按傳地址方式,但調(diào)用時(shí)想使實(shí)參變量如果形參定義是按傳地址方式,但調(diào)用時(shí)想使實(shí)參變量按值方式傳遞,可以把實(shí)參變量加上括號(hào),將其轉(zhuǎn)換成表達(dá)按值方式傳遞,可以把實(shí)參變量加上括號(hào),將其轉(zhuǎn)換成表達(dá)式即可。式即可。 例例5.5參數(shù)的傳遞問(wèn)題:參數(shù)的傳遞問(wèn)題:第5章 過(guò)程與函數(shù)224使用子過(guò)程還是使用函數(shù)過(guò)程使用子過(guò)程還是使用函數(shù)過(guò)程 解決一個(gè)問(wèn)題既可以使用子過(guò)程,也可以使用函數(shù)過(guò)程

20、,解決一個(gè)問(wèn)題既可以使用子過(guò)程,也可以使用函數(shù)過(guò)程,是使用子過(guò)程還是使用函數(shù)過(guò)程呢?是使用子過(guò)程還是使用函數(shù)過(guò)程呢?如果是需要求得一個(gè)值,如果是需要求得一個(gè)值,一般情況使用函數(shù)過(guò)程一般情況使用函數(shù)過(guò)程,如不是為了求一個(gè)值,而是完成一如不是為了求一個(gè)值,而是完成一些操作,些操作,或需要返回多個(gè)值或需要返回多個(gè)值,則使用子過(guò)程比較方便,則使用子過(guò)程比較方便。 例例5.6分別編寫(xiě)計(jì)算下面級(jí)數(shù)的子過(guò)程和函數(shù)過(guò)程,并在分別編寫(xiě)計(jì)算下面級(jí)數(shù)的子過(guò)程和函數(shù)過(guò)程,并在窗體的單擊事件中調(diào)用。窗體的單擊事件中調(diào)用。級(jí)數(shù)為,級(jí)數(shù)為, 要求精度為:要求精度為:)!2(.! 4! 2)12(3nxxxsn610)!2(

21、nxn第5章 過(guò)程與函數(shù)235.4.4 數(shù)組作過(guò)程的參數(shù)數(shù)組作過(guò)程的參數(shù) Visual Basic允許把數(shù)組作為實(shí)參傳送到過(guò)程中。數(shù)組作允許把數(shù)組作為實(shí)參傳送到過(guò)程中。數(shù)組作參數(shù)是通過(guò)傳地址方式傳送。在傳送數(shù)組時(shí),除遵守參數(shù)傳參數(shù)是通過(guò)傳地址方式傳送。在傳送數(shù)組時(shí),除遵守參數(shù)傳送的一般規(guī)則外,還應(yīng)注意以下幾點(diǎn):送的一般規(guī)則外,還應(yīng)注意以下幾點(diǎn): 1為了把一個(gè)數(shù)組的全部元素傳送給一個(gè)過(guò)程,應(yīng)將數(shù)為了把一個(gè)數(shù)組的全部元素傳送給一個(gè)過(guò)程,應(yīng)將數(shù)組名分別寫(xiě)入形參表中,并略去數(shù)組的上下界,但括號(hào)不能組名分別寫(xiě)入形參表中,并略去數(shù)組的上下界,但括號(hào)不能省略。省略。Private Sub Sort(a()

22、As single) End Sub其中形參其中形參“a( )”即為數(shù)組。即為數(shù)組。第5章 過(guò)程與函數(shù)24 2被調(diào)過(guò)程可通過(guò)被調(diào)過(guò)程可通過(guò)Lbound和和Ubound函數(shù)確定實(shí)參數(shù)組函數(shù)確定實(shí)參數(shù)組的上、下界。的上、下界。 3當(dāng)用數(shù)組作形參時(shí),對(duì)應(yīng)的實(shí)參必須也是數(shù)組,且類(lèi)當(dāng)用數(shù)組作形參時(shí),對(duì)應(yīng)的實(shí)參必須也是數(shù)組,且類(lèi)型一致。型一致。 4實(shí)參和形參結(jié)合是按地址傳遞,即形參數(shù)組和實(shí)參數(shù)實(shí)參和形參結(jié)合是按地址傳遞,即形參數(shù)組和實(shí)參數(shù)組共用一段內(nèi)存單元。組共用一段內(nèi)存單元。 例如:定義了實(shí)參數(shù)組例如:定義了實(shí)參數(shù)組b(1 to 8),給它們賦了值,調(diào)用,給它們賦了值,調(diào)用Sort()函數(shù)過(guò)程的形式如下

23、:函數(shù)過(guò)程的形式如下: Sort b( ) 或或 Call Sort( b() ) 實(shí)參數(shù)組后面的括號(hào)可以省略,但為便于閱讀,建議一實(shí)參數(shù)組后面的括號(hào)可以省略,但為便于閱讀,建議一般不要省略為好。般不要省略為好。 5.4.4 數(shù)組作過(guò)程的參數(shù)數(shù)組作過(guò)程的參數(shù)第5章 過(guò)程與函數(shù)25 調(diào)用時(shí)形參數(shù)組調(diào)用時(shí)形參數(shù)組a和實(shí)參數(shù)組和實(shí)參數(shù)組b虛實(shí)結(jié)合,共用一段內(nèi)存單虛實(shí)結(jié)合,共用一段內(nèi)存單元,如圖元,如圖6-7所示。因此在所示。因此在Sort()過(guò)程中改變數(shù)組過(guò)程中改變數(shù)組a的各元素值,的各元素值,也就相當(dāng)于改變了實(shí)參數(shù)組也就相當(dāng)于改變了實(shí)參數(shù)組b中對(duì)應(yīng)的元素的值,當(dāng)調(diào)用結(jié)束中對(duì)應(yīng)的元素的值,當(dāng)調(diào)用結(jié)束

24、時(shí),形參數(shù)組時(shí),形參數(shù)組a成為無(wú)定義。成為無(wú)定義。 b(1) b(2) b(3) b(4) b(5) b(6) b(7) b(8) a(1) a(2) a(3) a(4) a(5) a(6) a(7) a(8)參數(shù)為數(shù)組時(shí)虛實(shí)結(jié)合示意圖參數(shù)為數(shù)組時(shí)虛實(shí)結(jié)合示意圖 例例5.7改寫(xiě)上章例改寫(xiě)上章例5.3的排序程序,分別將排序用子過(guò)程的排序程序,分別將排序用子過(guò)程Sort(),產(chǎn)生,產(chǎn)生N個(gè)隨機(jī)整數(shù)用子過(guò)程個(gè)隨機(jī)整數(shù)用子過(guò)程GetData(),輸入,輸入N個(gè)數(shù)組個(gè)數(shù)組元素用元素用PrData()子過(guò)程來(lái)完成。子過(guò)程來(lái)完成。5.4.4 數(shù)組作過(guò)程的參數(shù)數(shù)組作過(guò)程的參數(shù)第5章 過(guò)程與函數(shù)265.5 過(guò)程

25、的嵌套和遞歸調(diào)用過(guò)程的嵌套和遞歸調(diào)用5.5.1 過(guò)程的嵌套過(guò)程的嵌套 在程序中調(diào)用一子過(guò)程,而在子過(guò)程中又調(diào)用另外的子過(guò)在程序中調(diào)用一子過(guò)程,而在子過(guò)程中又調(diào)用另外的子過(guò)程,這種程序結(jié)構(gòu)稱(chēng)為程,這種程序結(jié)構(gòu)稱(chēng)為過(guò)程的嵌套。過(guò)程的嵌套。過(guò)程的嵌套調(diào)用執(zhí)行過(guò)過(guò)程的嵌套調(diào)用執(zhí)行過(guò)程如程如下圖:下圖:第5章 過(guò)程與函數(shù)275.5.2 過(guò)程的遞歸調(diào)用過(guò)程的遞歸調(diào)用 用自身的結(jié)構(gòu)來(lái)描述自身,稱(chēng)遞歸。例如,對(duì)階乘的定義:用自身的結(jié)構(gòu)來(lái)描述自身,稱(chēng)遞歸。例如,對(duì)階乘的定義:)!2() 1()!1()!1(!nnnnnn Visual Basic允許在一個(gè)允許在一個(gè)Sub子過(guò)程和子過(guò)程和Function過(guò)程的定

26、過(guò)程的定義內(nèi)部調(diào)用自己,即遞歸義內(nèi)部調(diào)用自己,即遞歸Sub子過(guò)程和遞歸子過(guò)程和遞歸Function函數(shù)。函數(shù)。例例5.8編求階乘編求階乘fac(n)=n! 的遞歸函數(shù)的遞歸函數(shù)5.5 過(guò)程的嵌套和遞歸調(diào)用過(guò)程的嵌套和遞歸調(diào)用第5章 過(guò)程與函數(shù)28Private Function fac(n As Integer) As Integer If n = 1 Then fac = 1 Else fac = n * fac(n - 1) End IfEnd FunctionPrivate Sub Form_Click() Print “fac(4)=”;fac(4)End Sub程序的遞歸過(guò)程:5.5

27、 過(guò)程的嵌套和遞歸調(diào)用過(guò)程的嵌套和遞歸調(diào)用第5章 過(guò)程與函數(shù)29說(shuō)明:說(shuō)明:遞歸處理分遞推和回歸兩個(gè)過(guò)程,如上圖所示。遞歸處理分遞推和回歸兩個(gè)過(guò)程,如上圖所示。使用遞歸算法必須要滿(mǎn)足以下的遞歸條件:使用遞歸算法必須要滿(mǎn)足以下的遞歸條件: (1)存在遞歸結(jié)束條件及結(jié)束時(shí)的值;)存在遞歸結(jié)束條件及結(jié)束時(shí)的值; (2)能用遞歸形式表示,且遞歸向終止條件發(fā)展。)能用遞歸形式表示,且遞歸向終止條件發(fā)展。5.5 過(guò)程的嵌套和遞歸調(diào)用過(guò)程的嵌套和遞歸調(diào)用第5章 過(guò)程與函數(shù)30 在在第第1 1章章我們介紹了我們介紹了VBVB應(yīng)用程序(通常稱(chēng)為工程)的組織應(yīng)用程序(通常稱(chēng)為工程)的組織結(jié)構(gòu),它由結(jié)構(gòu),它由窗體模

28、塊、標(biāo)準(zhǔn)模塊和類(lèi)模塊窗體模塊、標(biāo)準(zhǔn)模塊和類(lèi)模塊組成。組成。VBVB程序代碼就程序代碼就保存在窗體模塊文件(保存在窗體模塊文件(.Frm.Frm)、標(biāo)準(zhǔn)模塊文件()、標(biāo)準(zhǔn)模塊文件(.Bas.Bas)或)或類(lèi)模塊文件(類(lèi)模塊文件(.Cls.Cls)中。它們形成了工程的一種模塊層次結(jié))中。它們形成了工程的一種模塊層次結(jié)構(gòu),如下圖所示。構(gòu),如下圖所示。5.6 過(guò)程和變量的作用域過(guò)程和變量的作用域第5章 過(guò)程與函數(shù)31窗體模塊窗體模塊(文件擴(kuò)展名為文件擴(kuò)展名為 .FRM ) 窗體模塊。窗體模塊。窗體模塊可以包含處理事件的過(guò)程、窗體模塊可以包含處理事件的過(guò)程、通用過(guò)程以及變量、常數(shù)、類(lèi)型和外部過(guò)程的窗體通

29、用過(guò)程以及變量、常數(shù)、類(lèi)型和外部過(guò)程的窗體級(jí)聲明級(jí)聲明。如果要在文本編輯器中觀察窗體模塊,則。如果要在文本編輯器中觀察窗體模塊,則還會(huì)看到窗體及其控件的描述,包括它們的屬性設(shè)還會(huì)看到窗體及其控件的描述,包括它們的屬性設(shè)置值。寫(xiě)入窗體模塊的代碼是該窗體所屬的具體應(yīng)置值。寫(xiě)入窗體模塊的代碼是該窗體所屬的具體應(yīng)用程序?qū)S玫?;它也可以引用該?yīng)用程序內(nèi)的其它用程序?qū)S玫模凰部梢砸迷搼?yīng)用程序內(nèi)的其它窗體或?qū)ο?。窗體或?qū)ο蟆?.6 過(guò)程和變量的作用域過(guò)程和變量的作用域第5章 過(guò)程與函數(shù)32標(biāo)準(zhǔn)模塊標(biāo)準(zhǔn)模塊 (文件擴(kuò)展名為文件擴(kuò)展名為BAS) 它們它們可以包含變量、常數(shù)、類(lèi)型、外部過(guò)程和全可以包含變量、常

30、數(shù)、類(lèi)型、外部過(guò)程和全局過(guò)程的全局局過(guò)程的全局(在整個(gè)應(yīng)用程序范圍內(nèi)有效的在整個(gè)應(yīng)用程序范圍內(nèi)有效的)聲明或聲明或模塊級(jí)聲明模塊級(jí)聲明。寫(xiě)入標(biāo)準(zhǔn)模塊的代碼不必綁在特定的應(yīng)。寫(xiě)入標(biāo)準(zhǔn)模塊的代碼不必綁在特定的應(yīng)用程序上,則在許多不同的應(yīng)用程序中可以重用標(biāo)準(zhǔn)用程序上,則在許多不同的應(yīng)用程序中可以重用標(biāo)準(zhǔn)模塊。模塊。5.6 過(guò)程和變量的作用域過(guò)程和變量的作用域第5章 過(guò)程與函數(shù)33類(lèi)模塊類(lèi)模塊(文件擴(kuò)展名為文件擴(kuò)展名為 .CLS) 在在 Visual Basic 中類(lèi)模塊是面向?qū)ο缶幊痰幕A(chǔ)。中類(lèi)模塊是面向?qū)ο缶幊痰幕A(chǔ)??稍陬?lèi)模塊中編寫(xiě)代碼建立新對(duì)象。這些新對(duì)象可以可在類(lèi)模塊中編寫(xiě)代碼建立新對(duì)象。這

31、些新對(duì)象可以包含自定義的屬性和方法。實(shí)際上,窗體正是這樣一包含自定義的屬性和方法。實(shí)際上,窗體正是這樣一種類(lèi)模塊,在其上可安放控件,可顯示窗體窗口。種類(lèi)模塊,在其上可安放控件,可顯示窗體窗口。5.6 過(guò)程和變量的作用域過(guò)程和變量的作用域第5章 過(guò)程與函數(shù)345.6.1 過(guò)程的作用域過(guò)程的作用域Public|Private Sub 子過(guò)程名子過(guò)程名(形式參數(shù)列表形式參數(shù)列表) . End Sub概念概念 通用子過(guò)程和函數(shù)過(guò)程既可寫(xiě)在通用子過(guò)程和函數(shù)過(guò)程既可寫(xiě)在窗體模塊中窗體模塊中也也可寫(xiě)在可寫(xiě)在標(biāo)準(zhǔn)模塊中標(biāo)準(zhǔn)模塊中,在定義時(shí)可選用關(guān)鍵字,在定義時(shí)可選用關(guān)鍵字PrivatePrivate(局部)(

32、局部)和和PublicPublic(全局)(全局),來(lái)決定它們,來(lái)決定它們能被調(diào)用的范圍。能被調(diào)用的范圍。 第5章 過(guò)程與函數(shù)351、窗體窗體/模塊級(jí)過(guò)程:模塊級(jí)過(guò)程: 加加Private關(guān)鍵字的過(guò)程,只能被定義的窗體或模關(guān)鍵字的過(guò)程,只能被定義的窗體或模 塊中的塊中的過(guò)程調(diào)用。過(guò)程調(diào)用。2、全局級(jí)過(guò)程:全局級(jí)過(guò)程: 加加Public關(guān)鍵字關(guān)鍵字(或缺省)(或缺?。┑倪^(guò)程,可供該應(yīng)用程序的的過(guò)程,可供該應(yīng)用程序的所有窗體和所有標(biāo)準(zhǔn)模塊中的過(guò)程調(diào)用。所有窗體和所有標(biāo)準(zhǔn)模塊中的過(guò)程調(diào)用。按過(guò)程的作用范圍來(lái)劃分,過(guò)程可分為:按過(guò)程的作用范圍來(lái)劃分,過(guò)程可分為: 模塊級(jí)過(guò)程模塊級(jí)過(guò)程 全局級(jí)過(guò)程全局級(jí)

33、過(guò)程用例用例7.1來(lái)說(shuō)明過(guò)程的作用域來(lái)說(shuō)明過(guò)程的作用域 5.6.1 過(guò)程的作用域過(guò)程的作用域第5章 過(guò)程與函數(shù)36總結(jié)歸納過(guò)程的定義及作用域如下表(教材總結(jié)歸納過(guò)程的定義及作用域如下表(教材Pg.163)幾點(diǎn)說(shuō)明:(教材幾點(diǎn)說(shuō)明:(教材Pg.164)5.6.1 過(guò)程的作用域過(guò)程的作用域第5章 過(guò)程與函數(shù)375.6.2 變量的作用域變量的作用域概述:概述: 在在VB中,由于可以在過(guò)程中和模塊中聲明變量,中,由于可以在過(guò)程中和模塊中聲明變量,根據(jù)定義變量的位置和定義變量的語(yǔ)句不同,變量根據(jù)定義變量的位置和定義變量的語(yǔ)句不同,變量可以分為:可以分為:局部變量局部變量(過(guò)程級(jí)變量)(過(guò)程級(jí)變量)窗體窗

34、體/模塊級(jí)變量模塊級(jí)變量(私有的模塊級(jí)變量,能被本模(私有的模塊級(jí)變量,能被本模塊的所有過(guò)程和函數(shù)使用)塊的所有過(guò)程和函數(shù)使用)全局級(jí)變量全局級(jí)變量(公有的模塊級(jí)變量)。(公有的模塊級(jí)變量)。第5章 過(guò)程與函數(shù)381.過(guò)程級(jí)變量過(guò)程級(jí)變量局部變量局部變量 局部變量:局部變量:在過(guò)程內(nèi)用聲明的變量,只能在在過(guò)程內(nèi)用聲明的變量,只能在本過(guò)程中使用。本過(guò)程中使用。 在過(guò)程內(nèi)部使用在過(guò)程內(nèi)部使用 Dim 或者或者 Static 關(guān)鍵字來(lái)聲明關(guān)鍵字來(lái)聲明的變量,只在聲明它們的過(guò)程中才能被訪問(wèn)或改變?cè)摰淖兞?,只在聲明它們的過(guò)程中才能被訪問(wèn)或改變?cè)撟兞康闹担瑒e的過(guò)程不可訪問(wèn)。所以可以在不同的過(guò)變量的值,別的

35、過(guò)程不可訪問(wèn)。所以可以在不同的過(guò)程中聲明相同名字的局部變量而互不影響。程中聲明相同名字的局部變量而互不影響。 5.6.2 變量的作用域變量的作用域第5章 過(guò)程與函數(shù)39例:例:Private Sub Form_Load() Dim n% n= 10End SubPrivate Sub From_Click() Dim n% Print “n=“;nEnd Sub程序運(yùn)行后單擊窗體,其輸出結(jié)果是什么?程序運(yùn)行后單擊窗體,其輸出結(jié)果是什么?5.6.2 變量的作用域變量的作用域第5章 過(guò)程與函數(shù)402.窗體窗體/模塊級(jí)變量模塊級(jí)變量 窗體窗體/模塊級(jí)變量:模塊級(jí)變量:在在“ “通用通用聲明聲明” ”

36、段中用段中用Dim語(yǔ)句或用語(yǔ)句或用Private語(yǔ)句聲明的變量,可被本窗體語(yǔ)句聲明的變量,可被本窗體/模模塊的任何過(guò)程訪問(wèn)。但其他模塊塊的任何過(guò)程訪問(wèn)。但其他模塊卻不能訪問(wèn)該變量。卻不能訪問(wèn)該變量。 例如:在例如:在“ “通用聲明通用聲明” ”段聲明如段聲明如下變量下變量:Private s As StringDim a As Integer5.6.2 變量的作用域變量的作用域例:例:Dim n% Private Sub Form_Load() n= 10End SubPrivate Sub From_Click() Print “n=“;nEnd Sub第5章 過(guò)程與函數(shù)413 全局變量全局

37、變量 全局變量全局變量也稱(chēng)公有的模塊級(jí)變量,在窗體模塊也稱(chēng)公有的模塊級(jí)變量,在窗體模塊或標(biāo)準(zhǔn)模塊的頂部的或標(biāo)準(zhǔn)模塊的頂部的“通用通用”聲明段用聲明段用Public關(guān)鍵關(guān)鍵字聲明,它的作用范圍是整個(gè)應(yīng)用程序,即可被本字聲明,它的作用范圍是整個(gè)應(yīng)用程序,即可被本應(yīng)用程序的任何過(guò)程或函數(shù)訪問(wèn)。應(yīng)用程序的任何過(guò)程或函數(shù)訪問(wèn)。例如:例如: Public a As Integer,b As single5.6.2 變量的作用域變量的作用域第5章 過(guò)程與函數(shù)423種變量聲明及使用規(guī)則如下表:種變量聲明及使用規(guī)則如下表:5.6.2 變量的作用域變量的作用域第5章 過(guò)程與函數(shù)43 不同過(guò)程內(nèi)的局部變量可以同名,

38、它們互不影響。不同過(guò)程內(nèi)的局部變量可以同名,它們互不影響。 不同窗體或模塊間的窗體不同窗體或模塊間的窗體/模塊級(jí)變量也可以同名。模塊級(jí)變量也可以同名。 不同窗體或模塊中定義的全局變量也可以同名,但在使用時(shí)不同窗體或模塊中定義的全局變量也可以同名,但在使用時(shí)應(yīng)在變量名前加上定義該變量的窗體或模塊名。應(yīng)在變量名前加上定義該變量的窗體或模塊名。 如果局部變量與同一窗體或模塊中定義的窗體如果局部變量與同一窗體或模塊中定義的窗體/模塊級(jí)變量模塊級(jí)變量同名,則在定義該局部變量的過(guò)程中優(yōu)先訪問(wèn)該局部變量。同名,則在定義該局部變量的過(guò)程中優(yōu)先訪問(wèn)該局部變量。 如果局部變量與全局變量同名,則在定義該局部變量的過(guò)

39、程如果局部變量與全局變量同名,則在定義該局部變量的過(guò)程中優(yōu)先訪問(wèn)該局部變量,如果要訪問(wèn)同名的全局變量,應(yīng)該中優(yōu)先訪問(wèn)該局部變量,如果要訪問(wèn)同名的全局變量,應(yīng)該在全局變量名前加上全局變量所在窗體或模塊的名字。在全局變量名前加上全局變量所在窗體或模塊的名字。關(guān)于變量同名問(wèn)題的關(guān)于變量同名問(wèn)題的幾點(diǎn)說(shuō)明幾點(diǎn)說(shuō)明:5.6.2 變量的作用域變量的作用域第5章 過(guò)程與函數(shù)44 1.動(dòng)態(tài)變量動(dòng)態(tài)變量概念概念 在過(guò)程中使用在過(guò)程中使用Dim語(yǔ)句定義的局部變量稱(chēng)為動(dòng)態(tài)變量語(yǔ)句定義的局部變量稱(chēng)為動(dòng)態(tài)變量只有當(dāng)過(guò)程被調(diào)用時(shí),系統(tǒng)才為動(dòng)態(tài)變量分配存儲(chǔ)只有當(dāng)過(guò)程被調(diào)用時(shí),系統(tǒng)才為動(dòng)態(tài)變量分配存儲(chǔ)空間空間 ,動(dòng)態(tài)變量才能

40、夠在本過(guò)程中使用,動(dòng)態(tài)變量才能夠在本過(guò)程中使用 過(guò)程調(diào)用結(jié)束后,動(dòng)態(tài)變量的存儲(chǔ)空間被系統(tǒng)重新過(guò)程調(diào)用結(jié)束后,動(dòng)態(tài)變量的存儲(chǔ)空間被系統(tǒng)重新收回,動(dòng)態(tài)變量又無(wú)法使用了收回,動(dòng)態(tài)變量又無(wú)法使用了 5.6.3 變量的生存期變量的生存期動(dòng)態(tài)變量的生存期就是過(guò)程的調(diào)用期動(dòng)態(tài)變量的生存期就是過(guò)程的調(diào)用期第5章 過(guò)程與函數(shù)452. 靜態(tài)變量靜態(tài)變量 在過(guò)程中使用在過(guò)程中使用Static語(yǔ)句定義局部變量,這種局部變量稱(chēng)語(yǔ)句定義局部變量,這種局部變量稱(chēng)為靜態(tài)變量:為靜態(tài)變量: 除作用域之外,變量還有存活期,在這一期間變量能夠保除作用域之外,變量還有存活期,在這一期間變量能夠保持它們的值。持它們的值。 在應(yīng)用程序的

41、存活期內(nèi)一直保持在應(yīng)用程序的存活期內(nèi)一直保持模塊級(jí)變量模塊級(jí)變量和和全局變量全局變量的的值。但是,對(duì)于值。但是,對(duì)于Dim聲明的局部變量聲明的局部變量?jī)H當(dāng)過(guò)程執(zhí)行期間存在,僅當(dāng)過(guò)程執(zhí)行期間存在,當(dāng)一個(gè)過(guò)程執(zhí)行完畢,它的局部變量的值就已經(jīng)不存在,而當(dāng)一個(gè)過(guò)程執(zhí)行完畢,它的局部變量的值就已經(jīng)不存在,而且且變量所占據(jù)的內(nèi)存也被釋放變量所占據(jù)的內(nèi)存也被釋放。當(dāng)下一次執(zhí)行該過(guò)程時(shí),它。當(dāng)下一次執(zhí)行該過(guò)程時(shí),它的所有局部變量將重新初始化。的所有局部變量將重新初始化。 概念概念局部變量的存活期由其定義的關(guān)鍵詞來(lái)決定。局部變量的存活期由其定義的關(guān)鍵詞來(lái)決定。5.6.3 變量的生存期變量的生存期第5章 過(guò)程與函

42、數(shù)46局部變量聲明:局部變量聲明: Dim聲明:聲明:隨過(guò)程的調(diào)用而分配存貯單元,變量的初始化;隨過(guò)程的調(diào)用而分配存貯單元,變量的初始化;過(guò)程體結(jié)束,變量的內(nèi)容自動(dòng)消失,存貯單元釋放。過(guò)程體結(jié)束,變量的內(nèi)容自動(dòng)消失,存貯單元釋放。 Static聲明聲明,每次調(diào)用過(guò)程,變量保持上次調(diào)用結(jié)束時(shí)的值。,每次調(diào)用過(guò)程,變量保持上次調(diào)用結(jié)束時(shí)的值。 聲明形式:聲明形式: Static 變量名變量名 AS 類(lèi)型類(lèi)型Static Function 函數(shù)過(guò)程名函數(shù)過(guò)程名(參數(shù)列表參數(shù)列表) As 類(lèi)型類(lèi)型 Static Sub 子過(guò)程名子過(guò)程名(參數(shù)列表參數(shù)列表) 注意:過(guò)程名前加注意:過(guò)程名前加Static

43、,表示該過(guò)程內(nèi)的局,表示該過(guò)程內(nèi)的局部變量都是靜態(tài)變量。部變量都是靜態(tài)變量。5.6.3 變量的生存期變量的生存期第5章 過(guò)程與函數(shù)47例例5.10 編寫(xiě)一個(gè)驗(yàn)證密碼的程序,要求每單擊一次命令按鈕編寫(xiě)一個(gè)驗(yàn)證密碼的程序,要求每單擊一次命令按鈕cmdOK就驗(yàn)證一次用戶(hù)在文本框就驗(yàn)證一次用戶(hù)在文本框txtInput中輸入的密碼,只中輸入的密碼,只允許用戶(hù)輸入允許用戶(hù)輸入3次密碼,次密碼,3次都錯(cuò)則自動(dòng)退出。次都錯(cuò)則自動(dòng)退出。 const PWD = pass 預(yù)先設(shè)定密碼預(yù)先設(shè)定密碼Private Sub cmdOK_Click() Static times As Integer 定義靜態(tài)變量統(tǒng)計(jì)驗(yàn)

44、證次數(shù)定義靜態(tài)變量統(tǒng)計(jì)驗(yàn)證次數(shù) If txtInput PWD Then times = times + 1 times的初始值為的初始值為0 MsgBox Invalid Password! If times = 3 Then End Else MsgBox Welcome! times = 0 End IfEnd sub5.6.3 變量的生存期變量的生存期如果使用如果使用Dim語(yǔ)句定義語(yǔ)句定義times,則程序執(zhí)行情況如,則程序執(zhí)行情況如何?為什么在驗(yàn)證成功后,何?為什么在驗(yàn)證成功后,要把要把times賦值為賦值為0?第5章 過(guò)程與函數(shù)485.7 多重窗體與多模塊程序設(shè)計(jì)多重窗體與多模塊程

45、序設(shè)計(jì) 一個(gè)稍微復(fù)雜的應(yīng)用程序,不僅有多個(gè)窗體,還可能有標(biāo)一個(gè)稍微復(fù)雜的應(yīng)用程序,不僅有多個(gè)窗體,還可能有標(biāo)準(zhǔn)模塊和類(lèi)模塊,如下圖所示。準(zhǔn)模塊和類(lèi)模塊,如下圖所示。 本節(jié)介紹在多模塊程序本節(jié)介紹在多模塊程序中,關(guān)于啟動(dòng)對(duì)象的設(shè)置、中,關(guān)于啟動(dòng)對(duì)象的設(shè)置、窗體的加載與卸載、窗體的窗體的加載與卸載、窗體的加載與卸載時(shí)的事件、多模加載與卸載時(shí)的事件、多模塊間數(shù)據(jù)的傳遞等。塊間數(shù)據(jù)的傳遞等。第5章 過(guò)程與函數(shù)495.7.1 設(shè)置啟動(dòng)對(duì)象設(shè)置啟動(dòng)對(duì)象 在程序運(yùn)行時(shí),首先被加載并執(zhí)行的對(duì)象,稱(chēng)為程序的在程序運(yùn)行時(shí),首先被加載并執(zhí)行的對(duì)象,稱(chēng)為程序的啟啟動(dòng)對(duì)象動(dòng)對(duì)象。一個(gè)程序的啟動(dòng)對(duì)象可以是。一個(gè)程序的啟動(dòng)

46、對(duì)象可以是一個(gè)窗體一個(gè)窗體,也可以是標(biāo),也可以是標(biāo)準(zhǔn)模塊中名為準(zhǔn)模塊中名為Main的自定義的自定義Sub過(guò)程過(guò)程。缺省情況下,第一個(gè)。缺省情況下,第一個(gè)創(chuàng)建的窗體被指定為啟動(dòng)對(duì)象。創(chuàng)建的窗體被指定為啟動(dòng)對(duì)象。 1、設(shè)置方法:、設(shè)置方法: 從從“工程工程”菜單中的最后一項(xiàng)菜單中的最后一項(xiàng)“*屬性屬性” ,在,在“*工程工程屬性屬性”對(duì)話框中進(jìn)行設(shè)置。對(duì)話框中進(jìn)行設(shè)置。 2、如果設(shè)置從主過(guò)程、如果設(shè)置從主過(guò)程Main()啟動(dòng),則必須在標(biāo)準(zhǔn)模塊啟動(dòng),則必須在標(biāo)準(zhǔn)模塊中編寫(xiě)中編寫(xiě)Main()過(guò)程代碼。過(guò)程代碼。例:例:Pg170.5.7 多重窗體與多模塊程序設(shè)計(jì)多重窗體與多模塊程序設(shè)計(jì)第5章 過(guò)程與函

47、數(shù)505.7.2 窗體的加載與卸載過(guò)程窗體的加載與卸載過(guò)程 當(dāng)一個(gè)窗體要顯示在屏幕之前,必須先建立,當(dāng)一個(gè)窗體要顯示在屏幕之前,必須先建立,接著被裝入內(nèi)存(接著被裝入內(nèi)存(Load語(yǔ)句語(yǔ)句),最后顯示(),最后顯示(Show方方法法)在屏幕上。同樣,當(dāng)窗體要結(jié)束之前,會(huì)先從)在屏幕上。同樣,當(dāng)窗體要結(jié)束之前,會(huì)先從屏幕上隱藏(屏幕上隱藏(Hide方法方法),接著從內(nèi)存中刪除),接著從內(nèi)存中刪除(Unload方法方法) 5.7多重窗體與多模塊程序設(shè)計(jì)多重窗體與多模塊程序設(shè)計(jì)第5章 過(guò)程與函數(shù)51 在窗體的加載過(guò)程的各階段所用一的語(yǔ)句或方法以及所在窗體的加載過(guò)程的各階段所用一的語(yǔ)句或方法以及所觸發(fā)

48、的事件可用下面的圖來(lái)說(shuō)明:觸發(fā)的事件可用下面的圖來(lái)說(shuō)明:5.7 多重窗體與多模塊程序設(shè)計(jì)多重窗體與多模塊程序設(shè)計(jì)第5章 過(guò)程與函數(shù)52 在窗體的卸載過(guò)程的各階段所用一的語(yǔ)句或方法以及在窗體的卸載過(guò)程的各階段所用一的語(yǔ)句或方法以及所觸發(fā)的事件如下圖:所觸發(fā)的事件如下圖: Unload 語(yǔ)句QueryUnloadUnload5.7 多重窗體與多模塊程序設(shè)計(jì)多重窗體與多模塊程序設(shè)計(jì)第5章 過(guò)程與函數(shù)531、窗體的加載與顯示、窗體的加載與顯示(1)Load語(yǔ)句:裝入窗體到內(nèi)存語(yǔ)句:裝入窗體到內(nèi)存 Load 窗體名稱(chēng)窗體名稱(chēng) 說(shuō)明:執(zhí)行說(shuō)明:執(zhí)行Load語(yǔ)句后,窗體并不顯示出來(lái),但可引用語(yǔ)句后,窗體并不

49、顯示出來(lái),但可引用該窗體中的控件及各種屬性。該窗體中的控件及各種屬性。 注意:這里的窗體名稱(chēng)是窗體的注意:這里的窗體名稱(chēng)是窗體的Name屬性,屬性, 而不是窗體的文件名,以下相同。而不是窗體的文件名,以下相同。(3)Show方法:顯示一個(gè)窗體方法:顯示一個(gè)窗體 窗體名稱(chēng)窗體名稱(chēng).Show 模式模式 0 Modeless(非模式):可以對(duì)其它窗體進(jìn)行操作(非模式):可以對(duì)其它窗體進(jìn)行操作 1 Model,關(guān)閉才能對(duì)其它窗體進(jìn)行操作。,關(guān)閉才能對(duì)其它窗體進(jìn)行操作。5.7 多重窗體與多模塊程序設(shè)計(jì)多重窗體與多模塊程序設(shè)計(jì)第5章 過(guò)程與函數(shù)542、窗體的隱藏與卸載窗體的隱藏與卸載 (1)Unload語(yǔ)

50、句:從內(nèi)存刪除窗體語(yǔ)句:從內(nèi)存刪除窗體 Unload 說(shuō)明:說(shuō)明: 當(dāng)窗體卸載之后,所有在運(yùn)行時(shí)放到該窗體上的控件都當(dāng)窗體卸載之后,所有在運(yùn)行時(shí)放到該窗體上的控件都不再是可訪問(wèn)的。在設(shè)計(jì)時(shí)放到該窗體上的控件將保持不再是可訪問(wèn)的。在設(shè)計(jì)時(shí)放到該窗體上的控件將保持不變不變 在卸載窗體時(shí),只有顯示的部件被卸載。與該窗體模塊在卸載窗體時(shí),只有顯示的部件被卸載。與該窗體模塊相關(guān)聯(lián)的代碼還保持在內(nèi)存中。相關(guān)聯(lián)的代碼還保持在內(nèi)存中。(2)Hide方法:隱藏,沒(méi)有刪除方法:隱藏,沒(méi)有刪除 窗體名稱(chēng)窗體名稱(chēng). Hide5.7 多重窗體與多模塊程序設(shè)計(jì)多重窗體與多模塊程序設(shè)計(jì)第5章 過(guò)程與函數(shù)555.7.3 與窗

51、體加載與卸載過(guò)程的關(guān)的事件與窗體加載與卸載過(guò)程的關(guān)的事件1Initialize事件事件 2Load事件事件3Paint事件事件 4QueryUnLoad事件事件 5UnLoad事件事件 6Activate事件與事件與Deactivate事件事件 7Terminate事件事件 例例5.11 驗(yàn)證與窗體加載與卸載過(guò)程相關(guān)的事件被觸發(fā)的驗(yàn)證與窗體加載與卸載過(guò)程相關(guān)的事件被觸發(fā)的先后順序。先后順序。 5.7多重窗體與多模塊程序設(shè)計(jì)多重窗體與多模塊程序設(shè)計(jì)第5章 過(guò)程與函數(shù)565.8 應(yīng)用舉例應(yīng)用舉例5.8.1 查找問(wèn)題查找問(wèn)題例例5.12使用順序查找法,在一組數(shù)中查找某給定的數(shù)使用順序查找法,在一組數(shù)中查找某給定的數(shù)x 算法設(shè)計(jì):算法設(shè)計(jì): 設(shè)一組數(shù)據(jù)存放在數(shù)組設(shè)一組數(shù)據(jù)存放在數(shù)組a(1)-a(n)中,待查找的數(shù)據(jù)放在中,待查找的數(shù)據(jù)放在x 中,把中,把x與與a數(shù)組中的元素從頭到尾一數(shù)組中的元素從頭到尾一 一進(jìn)行比較查找。用變量一進(jìn)行比較查找。用變量p表示表示a數(shù)組元素下標(biāo),數(shù)組元素下標(biāo),p初值為初值為1,使,使x與與a(p)比較,如果比較,如果x不等不等于于a(p),則使,則使p=p+1,不斷重復(fù)這個(gè)過(guò)程;一旦,不斷重復(fù)這個(gè)過(guò)程;一旦x等于等于a(p)則退則退出循環(huán);另外,如果出循環(huán);另外,如果p大于數(shù)組長(zhǎng)度,循環(huán)也應(yīng)該停止,則可大于數(shù)組長(zhǎng)度,循環(huán)也應(yīng)該停止,則可由以

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論