




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、12 ,也稱為,也稱為“子過程子過程”或或“子程序子程序” 。調(diào)用調(diào)用事件過程或其他通用過程使用另一個通用過程稱事件過程或其他通用過程使用另一個通用過程稱為調(diào)用。為調(diào)用。 調(diào)用過程調(diào)用過程調(diào)用子過程的過程稱為調(diào)用子過程的過程稱為“調(diào)用過程調(diào)用過程”。 3調(diào)用過程調(diào)用過程: 調(diào)用調(diào)用Sprg1調(diào)用調(diào)用Sprg1調(diào)用調(diào)用Sprg2子過程子過程: Sprg1子過程子過程: Sprg2過程的執(zhí)行:過程的執(zhí)行:4過程分類過程分類: : Sub過程過程Function過過程程內(nèi)部過程內(nèi)部過程(方法方法)事件過程事件過程自定義過程自定義過程 內(nèi)部函數(shù)內(nèi)部函數(shù) 自定義函數(shù)自定義函數(shù) 其中,自定義函數(shù)和自定義過
2、程統(tǒng)稱為其中,自定義函數(shù)和自定義過程統(tǒng)稱為通用過程通用過程57.1.1 事件過程事件過程 VB程序是事件驅(qū)動的。程序是事件驅(qū)動的。 事件過程分為窗體事件過程分為窗體事件過程和控件事件過程。事件過程和控件事件過程。1.窗體事件過程:窗體事件過程:定義:定義:Private sub Form_事件名(事件名(參數(shù)列表參數(shù)列表)語句語句End sub6說明:說明:(1)窗體的事件過程由)窗體的事件過程由Form、下劃線、下劃線和事件名組成。和事件名組成。(2)private表示這個事件過程是局部的,表示這個事件過程是局部的,只有本窗體有效。只有本窗體有效。(3)事件名由)事件名由VB系統(tǒng)提供。系統(tǒng)提
3、供。(4)窗體過程有無參數(shù),由)窗體過程有無參數(shù),由VB提供的具提供的具體事件決定,用戶不可以隨意添加或者更體事件決定,用戶不可以隨意添加或者更改或者刪除。改或者刪除。72.控件事件過程控件事件過程格式:格式:Private Sub 控件名控件名_事件名(事件名(參數(shù)列表參數(shù)列表)語句語句End sub說明:說明:(1)窗體的事件過程由控件名、下劃線)窗體的事件過程由控件名、下劃線和事件名組成。和事件名組成。(2)private表示這個事件過程是局部的,表示這個事件過程是局部的,只有本窗體有效。只有本窗體有效。(3)窗體過程有無參數(shù),由)窗體過程有無參數(shù),由VB提供的具提供的具體事件決定,用戶
4、不可以隨意添加或者更體事件決定,用戶不可以隨意添加或者更改或者刪除。改或者刪除。8【例【例7-1】 窗體過程應(yīng)用示例:創(chuàng)建窗體的窗體過程應(yīng)用示例:創(chuàng)建窗體的Initialize、Load、Activate、GotFocus事件過事件過程,分別在立即窗口打印相應(yīng)的信息,觀察各個程,分別在立即窗口打印相應(yīng)的信息,觀察各個窗體過程執(zhí)行的順序。窗體過程執(zhí)行的順序。程序代碼如下:程序代碼如下:Private Sub Form_Activate() Debug.Print 觸發(fā)了觸發(fā)了Activate事件事件End SubPrivate Sub Form_GotFocus() Debug.Print 觸發(fā)
5、了觸發(fā)了GotFocus事件事件End Sub9Private Sub Form_Initialize() Debug.Print 觸發(fā)了觸發(fā)了Initialize事件事件End SubPrivate Sub Form_Load() Debug.Print 觸發(fā)了觸發(fā)了Load事件事件End Sub10【例【例7-2】 控件過程應(yīng)用示例:在運行程序控件過程應(yīng)用示例:在運行程序時,觸發(fā)文本框的時,觸發(fā)文本框的Keypress事件過程,在標(biāo)事件過程,在標(biāo)簽中顯示用戶敲擊的鍵名。簽中顯示用戶敲擊的鍵名。程序代碼如下:程序代碼如下:Private Sub Text1_KeyPress(KeyAscii
6、 As Integer) Text1.Text = Label1.Caption = 你敲擊了你敲擊了 & Chr(KeyAscii) & 鍵!鍵!End Sub117.1.2 通用過程通用過程 將多次被重復(fù)使用的程序代碼設(shè)將多次被重復(fù)使用的程序代碼設(shè)計成一個具有一定功能的獨立程序段,計成一個具有一定功能的獨立程序段,稱為通用過程。稱為通用過程。 與事件過程的不同之處:由用戶與事件過程的不同之處:由用戶創(chuàng)建,并且由其他事件過程或者通用創(chuàng)建,并且由其他事件過程或者通用過程顯式調(diào)用(不能由事件或者系統(tǒng)過程顯式調(diào)用(不能由事件或者系統(tǒng)觸發(fā))。觸發(fā))。1.定義通用Sub過程12Priv
7、ate|PublicStatic Sub () Exit Sub End SubSub過程體過程體2. 說明(1)在省略可選項的情況下,通用Sub過程以sub語句開始,以End sub結(jié)束,兩者之間的部分稱作子程序體或者過程體。 (2)以Private開頭的Sub過程是模塊級(私有)過程,只能在本模塊中被調(diào)用。(3)以Public開頭或省略Public或者Private關(guān)鍵字的Sub過程是全局過程,可以被應(yīng)用程序的所有模塊調(diào)用。 13(4)使用Static選項,表示過程內(nèi)部定義的所有局部變量為靜態(tài)變量,也就是調(diào)用了該過程后將保留過程中局部變量的值,下次再調(diào)用該過程時,局部變量保持上次調(diào)用后的值
8、。如果忽略,那么每次都重新初始化。 (5) 不具有值的意義,在Sub過程中不能給賦值,也不能給定義類型。(6) 形參列表:Sub過程可以沒有參數(shù),但是一堆括號不能省略,沒有參數(shù)的過程稱為無參過程。如果有多個參數(shù),參數(shù)之間逗號隔開。14形式參數(shù)的格式:Byval|Byref變量名 () as 數(shù)據(jù)類型1.Byval:表示形參是按照值傳遞參數(shù),參數(shù)傳遞是單向的;若省略Byval或者用Byref則表示參數(shù)是按照地址傳遞的,也就是雙向的。2.變量名 () :合法的Vb變量名或者數(shù)組名,有括號表示數(shù)組,否則是普通變量。3. as 數(shù)據(jù)類型:形參的類型15(7) 過程體內(nèi)不再定義過程,即過程定義不能嵌套。
9、但是可以調(diào)用其他的Sub過程或者函數(shù)過程。(8)End Sub:表示過程的結(jié)束。162.調(diào)用通用Sub過程 事件過程是通過事件驅(qū)動或者系統(tǒng)自動調(diào)用的,Sub過程必須通過調(diào)用語句執(zhí)行調(diào)用。調(diào)用Sub過程的格式: 格式1:call 過程名(實參列表)格式2:過程名實參列表17說明:1.過程名:必須是已經(jīng)定義的Sub過程名稱。2.實參列表:指的是要傳遞給Sub過程的常量、變量、表達(dá)式,各個參數(shù)逗號分隔,如果是數(shù)組,則在數(shù)組名之后跟一對空括號。 實參個數(shù)必須和形參一致。3.如果是無參的Sub過程,格式1中科院省略實參列表和圓括號,call 過程名。4.格式2中,過程名和實參列表之間有空格,且實參列表不
10、加括號。183.創(chuàng)建通用Sub過程(1)直接在代碼窗口創(chuàng)建選擇通用,鍵入Sub和過程名并回車后,系統(tǒng)直接添加圓括號和End sub。(2)使用添加過程對話框工程添加模塊新建選項卡,雙擊模塊圖標(biāo),打開代碼編輯窗口。選擇工具添加過程,彈出添加過程對話框,在對話框中輸入過程名,選擇類型以及范圍。19【例7-3】 輸入自然數(shù)a,b,c,計算p=a!+b!+c!。要求:編寫一個過程,計算階乘。在“計算”按鈕的Click事件中調(diào)用該過程,計算p并在文本框中顯示計算結(jié)果。程序代碼如下:20Option ExplicitDim a%, b%, c%, s1#, s2#, s3#, s#, i%Private
11、Sub Command1_Click() a = Val(Text1.Text) b = Val(Text2.Text) c = Val(Text3.Text) Call fact(a, s1) 調(diào)用過程 Call fact(b, s2) 調(diào)用過程 Call fact(c, s3) 調(diào)用過程 Text4.Text = Format(s1 + s2 + s3, 0.000)End Sub21Sub fact(n, s) 求階乘的過程 s = 1 For i = 1 To n s = s * i NextEnd Sub22【例7-4】 求一維數(shù)組中的最小值和最大值。要求:利用隨機數(shù)函數(shù)生成一個有1
12、0個元素的數(shù)組,編寫過程找出最大值和最小值。程序代碼如下:Option ExplicitDim a(1 To 10)Dim i%, ma%, mi%Sub bijiao(a(), ma, mi) 求最大和最小值的過程,引入數(shù)組參數(shù)a,a后面要跟一對空圓括號23ma = a(1) mi = a(1) For i = 2 To UBound(a) If a(i) ma Then ma = a(i) If a(i) mi Then mi = a(i) NextEnd Sub24Private Sub Form_Click() Call bijiao(a(), ma, mi) 調(diào)用過程,實參a為數(shù)組后
13、面要跟一對空圓括號 Text2.Text = Str(ma) 顯示結(jié)果Text3.Text = Str(mi) End SubPrivate Sub Form_Load() 給數(shù)組賦值 For i = 1 To 10 Randomize a(i) = Int(Rnd * 100) Text1.Text = Text1.Text & Str(a(i) NextEnd Sub2526 * * * * * Sub a() For i = 1 To 5 Print Tab(7 - i); For j = 1 To 2 * i - 1 Print *; Next j Print Next iEn
14、d Sub27在在VB中,有如中,有如Sin函數(shù)、函數(shù)、Sqr函數(shù)等內(nèi)部函數(shù)。函數(shù)等內(nèi)部函數(shù)。而程序員也可以自己定義函數(shù)。自定義函數(shù)通過而程序員也可以自己定義函數(shù)。自定義函數(shù)通過Function過程實現(xiàn)。過程實現(xiàn)。Function過程也稱為函數(shù)過程。過程也稱為函數(shù)過程。7.2.1 Function過程的定義Function過程的格式 28Public|PrivateStatic Function 函數(shù)過程名函數(shù)過程名 () As 函數(shù)過程名函數(shù)過程名 = Exit Function End Function函數(shù)過程體函數(shù)過程體2. 說明(1) Public: 缺省值。使用Public時表示各模
15、塊的所有其他過程都可以調(diào)用該過程。(2) Private: 使用Private時表示只有本模塊中的其他過程才可以調(diào)用該Function過程。(3) Static: 使用Static時表示將過程中的所有局部變 量說明為靜態(tài)變量。(4) 函數(shù)過程名: Function過程的名稱,遵循變量的命名規(guī)則。(5) : 表示Function過程的參數(shù)變量列表。多個變量之間用逗號隔開。格式: ByVal|ByRef ( ) As 29 ByVal: 表示該參數(shù)按值傳遞。 ByRef: 缺省值。表示該參數(shù)按地址傳遞。 : 任何變量名或數(shù)組名。 ( ): 當(dāng)參數(shù)為數(shù)組時使用。(6) As : 聲明函數(shù)值的類型。(
16、7) Exit Function語句: 從Function過程中退出。(8) Function過程通過賦值語句: 函數(shù)過程名= 將函數(shù)的返回值賦給。(9) Function過程的定義不能嵌套。函數(shù)過程應(yīng)該建立在模塊的通用聲明段。30317.2.2 Function過程的調(diào)用過程的調(diào)用1. 調(diào)用位置調(diào)用位置 直接在表達(dá)式中調(diào)用。直接在表達(dá)式中調(diào)用。2. 調(diào)用格式調(diào)用格式 (1)函數(shù)過程名:必須是一個已定義的函數(shù)過程的)函數(shù)過程名:必須是一個已定義的函數(shù)過程的名稱。名稱。(2)實參表:指要傳遞給函數(shù)過程的常量、變量或)實參表:指要傳遞給函數(shù)過程的常量、變量或表達(dá)式,各參數(shù)之間用逗號分隔。如果參數(shù)是
17、數(shù)組,表達(dá)式,各參數(shù)之間用逗號分隔。如果參數(shù)是數(shù)組,在數(shù)組名之后必須跟一對空括號。在數(shù)組名之后必須跟一對空括號。函數(shù)過程名函數(shù)過程名(實參表實參表)Sub過程和function 過程的區(qū)別1.Function過程有返回值,因此函數(shù)必須定義類型,同時在函數(shù)過程體內(nèi)必須對函數(shù)過程名賦值。 Sub無返回值,不需要定義類型和內(nèi)部賦值。2.到底采用哪種過程,一般情況下,通過一個過程求一個值,定義為function直觀些;求多個值或者完成一組操作,用Sub過程。32【例7-5】 輸入自然數(shù)a,b,c,計算p=a!+b!+c!。要求:編寫一個Function過程,計算階乘。在“計算”按鈕的Click事件中調(diào)
18、用該過程,計算p并在文本框中顯示計算結(jié)果。在例7-5中將用Function過程完成例7-3的功能。程序代碼如下:33Dim a%, b%, c%, f#, p#, i%Private Sub Command1_Click() a = Val(Text1.Text) b = Val(Text2.Text) c = Val(Text3.Text) p = fact(a) + fact(b) + fact(c) 調(diào)用函數(shù)過程計算各個階乘 Text4.Text = Format(p, 0.000)End Sub34Function fact(n As Integer) As Double 求階乘的函數(shù)
19、過程 f = 1 For i = 1 To n f = f * i Next fact = fEnd Function35【例7-6】 求兩個自然數(shù)的最大公約數(shù)和最小公倍數(shù)。要求在文本框中輸入兩個自然數(shù),編寫函數(shù)過程,求兩個數(shù)的最大公約數(shù)和最小公倍數(shù),在窗體的Click事件中,調(diào)用函數(shù),計算結(jié)果。假設(shè)過程名為gcd,需要設(shè)置兩個參數(shù)x, y,求x, y的最大公約數(shù)可以使用輾轉(zhuǎn)相除法。具體如下:(1) 以第一個數(shù)x作為被除數(shù),第二個數(shù)y作為除數(shù),求余數(shù)r。(2) 如果r不為0,則將除數(shù)y作為新的被除數(shù)x,而將余數(shù)r作為新的除數(shù)y,再進(jìn)行相除,得到新的余數(shù)r。(3) 如果r不為0,則重復(fù)步驟(2)
20、。如果r為0,則這時的除數(shù)就是最大公約數(shù)。36Option ExplicitDim a%, b%, r%, t%, p%Function gcd(ByVal x As Integer, ByVal y As Integer) As Integer求最大公約數(shù)的函數(shù)過程 If x y Then t = y: y = x: x = t 保證x始終大于y Do While y 0輾轉(zhuǎn)相除求最大公約數(shù) r = x Mod y x = y y = r Loop gcd = xEnd Function37Function lcm(x, y, m) As Integer 求最小公倍數(shù)的函數(shù)過程 lcm =
21、x * y / m 最小公倍數(shù)等于兩個數(shù)的乘積除以它們的最大公約數(shù)End FunctionPrivate Sub Form_click() a = Val(Text1.Text) b = Val(Text2.Text) Text3.Text = gcd(a, b) 調(diào)用函數(shù)過程求最大公約數(shù) Text4.Text = lcm(a, b, gcd(a, b)調(diào)用函數(shù)過程求最小公倍數(shù)End Sub3839 參數(shù)傳遞參數(shù)傳遞是指是指調(diào)用過程與被調(diào)用過程之間的一種調(diào)用過程與被調(diào)用過程之間的一種數(shù)據(jù)通訊方法。數(shù)據(jù)通訊方法。 數(shù)據(jù)的傳遞方式可以是:數(shù)據(jù)的傳遞方式可以是: 單向的單向的按值傳遞按值傳遞 雙向的
22、雙向的按地址傳遞按地址傳遞 數(shù)據(jù)傳遞是通過數(shù)據(jù)傳遞是通過形參形參和和實參實參進(jìn)行傳遞的。進(jìn)行傳遞的。 7.3.1 形參和實參 形參: 出現(xiàn)在Sub或Function語句中。 實參: 出現(xiàn)在調(diào)用程序中。 例如,定義如下一個過程: Sub SubTest(n As Integer,Sum As Single) End Sub 調(diào)用語句: Call SubTest( a , s )40形參形參實參實參41說明說明: 一般情況下,形參表與實參表中對應(yīng)參數(shù)個數(shù)、一般情況下,形參表與實參表中對應(yīng)參數(shù)個數(shù)、類型、位置順序必須一一對應(yīng)。類型、位置順序必須一一對應(yīng)。 形參表中的參數(shù)可以是形參表中的參數(shù)可以是:
23、除固定長度字符串之外的合法變量名、數(shù)組名除固定長度字符串之外的合法變量名、數(shù)組名() 實參表中的參數(shù)可以是實參表中的參數(shù)可以是: 常量、變量、表達(dá)式、數(shù)組名常量、變量、表達(dá)式、數(shù)組名() 形參與實參的結(jié)合有兩種方式形參與實參的結(jié)合有兩種方式: 按值傳遞和按地址傳遞。按值傳遞和按地址傳遞。427.3.2 按地址傳遞按地址傳遞(引用)(引用)指將實參的地址傳給形參,使形參和實參具指將實參的地址傳給形參,使形參和實參具有相同的地址,即形參與實參共享同一存儲單元。有相同的地址,即形參與實參共享同一存儲單元。(1) 當(dāng)實參為變量或數(shù)組時,形參使用關(guān)鍵字當(dāng)實參為變量或數(shù)組時,形參使用關(guān)鍵字ByRef定義定
24、義(或省略或省略)表示要按地址傳遞。表示要按地址傳遞。(2) 當(dāng)參數(shù)是數(shù)組時,數(shù)組名之后必須使用一當(dāng)參數(shù)是數(shù)組時,數(shù)組名之后必須使用一對空的圓括號。對空的圓括號。 按地址傳遞可以實現(xiàn)調(diào)用過程與子過程之按地址傳遞可以實現(xiàn)調(diào)用過程與子過程之間數(shù)據(jù)的間數(shù)據(jù)的雙向傳遞雙向傳遞?!纠?-7】 定義了如下的函數(shù)過程:Option ExplicitPublic Function f(x As Integer) Dim y As Integer x = 10: y = 3: f = x * yEnd Function在命令按鈕的Click事件過程如下:Private Sub Command1_Click()
25、Dim x As Integer, y As Integer x = 30: y = 3: y = f(x) Print x; yEnd Sub43 Sub SS(ByRef X, ByRef Y, ByRef Z) X = X + 1: Y = Y + 1: Z = Z + 1 End Sub而命令按鈕Command1的Click事件過程如下: Private Sub Command1_Click() A = 1: B = 2: C = 3 Call SS(A, B, C) Print A, B, C End Sub44【補充補充】設(shè)定義了以下設(shè)定義了以下SS過程:過程:形參形參: X Y
26、Z實參實參: A B C存儲單元存儲單元45實參:實參: A B C 1 2 3形參:形參: X Y Z存儲單元:存儲單元:實參:實參: A B C 2 3 4形參:形參: X Y Z存儲單元:存儲單元:執(zhí)行執(zhí)行Call語句,進(jìn)入過程時語句,進(jìn)入過程時 從過程返回時從過程返回時 運行時,單擊命令按鈕在窗體上打印運行時,單擊命令按鈕在窗體上打印: 2 3 4467.3.3 按值傳遞按值傳遞實參把其值傳遞給形參而不傳遞實參的地址。實參把其值傳遞給形參而不傳遞實參的地址。數(shù)據(jù)的傳遞是單向的。數(shù)據(jù)的傳遞是單向的。(1) 當(dāng)實參為常量或表達(dá)式時,數(shù)據(jù)傳遞總是單向當(dāng)實參為常量或表達(dá)式時,數(shù)據(jù)傳遞總是單向的
27、。的。例如例如: Sub Test( n As Integer,Sum As Single) Call Test(10, 1+2)47【補補】設(shè)定義了以下過程】設(shè)定義了以下過程SS:Sub SS(ByVal X, ByVal Y, ByVal Z) X = X + 1 : Y = Y + 1 : Z = Z + 1End Sub命令按鈕命令按鈕Command1的的Click事件過程如下:事件過程如下:Private Sub Command1_Click() A = 1: B = 2: C = 3 Call SS(A, B, C) 在這里調(diào)用在這里調(diào)用SS子過程子過程 Print A, B, C
28、End Sub48因此,運行時單擊命令按鈕,在窗體上打?。阂虼?,運行時單擊命令按鈕,在窗體上打?。?1 2 31 2 31 2 31 2 31 2 3實參:實參: A B CA B C形參:形參: X Y ZX Y Z1 2 31 2 32 3 42 3 4實參:實參: A B CA B C形參:形參: X Y ZX Y Z執(zhí)行執(zhí)行Call語句,進(jìn)入過程時語句,進(jìn)入過程時 從過程返回時從過程返回時 【例7-8】 有如下的程序:Private Sub Form_click() Dim a As Integer, b As Integer a = 20: b = 50 p1 a, b: p2 a,
29、 b: p3 a, b Print a=; a, b=; bEnd Sub49Sub p1(x As Integer, ByVal y As Integer) x = x + 10: y = y + 20End SubSub p2(ByVal x As Integer, y As Integer) x = x + 10: y = y + 20End SubSub p3(ByVal x As Integer, ByVal y As Integer) x = x + 10: y = y + 20End Sub50【例7-9】 編寫一個函數(shù)過程,計算x的y次方,其中y0。單擊窗體時調(diào)用該函數(shù)過程,打
30、印51、52、53、54、55的結(jié)果。程序代碼如下:Option ExplicitDim r As Single, i As IntegerFunction power(x As Integer, ByVal y As Integer) r = 1 Do While y 0 r = r * x y = y -1 Loop power = rEnd Function51Private Sub Form_click() For i = 1 To 5 r = power(5, i) Print r; Next iEnd Sub52537.3.4 使用數(shù)組參數(shù)使用數(shù)組參數(shù)使用數(shù)組作為參數(shù)時只能按地址傳
31、遞,不能使用數(shù)組作為參數(shù)時只能按地址傳遞,不能按值傳遞。當(dāng)參數(shù)是數(shù)組時,數(shù)組名之后需要使按值傳遞。當(dāng)參數(shù)是數(shù)組時,數(shù)組名之后需要使用一對空的圓括號。用一對空的圓括號?!纠?-10】 編寫一個Sub過程,將數(shù)組元素中的數(shù)據(jù)倒置。程序代碼如下:Option ExplicitSub swap(a() As Integer) 定義sub過程,將數(shù)組作為形參,不能定義數(shù)組的上下界 Dim i As Integer, t As Integer For i = LBound(a() To UBound(a() / 2 在過程中,用LBound()和UBound() 54獲得數(shù)組的上界和下界將第一個與最后一個
32、交換,第二個與倒數(shù)第二個交換,.,第I個與第(UBound(a() + 1 -i)個交換 t = a(i) a(i) = a(UBound(a() + 1 -i) a(UBound(a() + 1 -i) = t Next iEnd Sub55Private Sub Form_click() Dim n As Integer, i As Integer Dim a() As Integer n = Val(InputBox(請輸入數(shù)組的個數(shù):) ReDim a(1 To n) For i = 1 To n Randomize a(i) = Int(Rnd * 20) Text1.Text =
33、Text1.Text & Str(a(i) Next i56 Call swap(a() 調(diào)用過程,將已經(jīng)賦值的數(shù)組作為實參,也可以寫成 swap a() For i = 1 To n Text2.Text = Text2.Text & Str(a(i) Next iEnd Sub57587.4.1 過程的嵌套調(diào)用過程不能嵌套定義過程不能嵌套定義,即不能在一個過程體內(nèi)再即不能在一個過程體內(nèi)再定義另一個過程定義另一個過程,但過程可以嵌套調(diào)用但過程可以嵌套調(diào)用,即可以即可以在一個在一個過程體過程體中中調(diào)用調(diào)用另一個另一個過程過程。【例例7-15】編寫程序,計算編寫程序,計算y的值。
34、的值。11111 2 1 2 31 2 39 10y 在這里用函數(shù)過程的嵌套實現(xiàn)在這里用函數(shù)過程的嵌套實現(xiàn),首先編寫一個函數(shù)過程首先編寫一個函數(shù)過程,求每求每一項分母的值一項分母的值;其次編寫另外一個函數(shù)過程求各項的和。其次編寫另外一個函數(shù)過程求各項的和。 Option ExplicitFunction sum(n As Integer) As DoubleDim i As Integersum = 0For i = 1 To nsum = sum + iNext iEnd FunctionFunction sigma(n As Integer) As DoubleDim i As Integ
35、erFor i = 1 To nsigma = sigma + 1 / sum(i) 在在sigma()函數(shù)過程中調(diào)用函數(shù)過程中調(diào)用sum()函數(shù)函數(shù)Next iEnd FunctionPrivate Sub Command1_Click()Text1.Text = Format(sigma(10), 0.00000000000000)在事件過程中調(diào)用在事件過程中調(diào)用sigma()函數(shù)函數(shù)End Sub窗體模塊窗體模塊(Form) (文件擴展名文件擴展名)標(biāo)準(zhǔn)模塊標(biāo)準(zhǔn)模塊(Module) (文件擴展名文件擴展名)類模塊類模塊(Class) (文件擴展名文件擴展名)7.5 Visual Basi
36、c工程結(jié)構(gòu)工程結(jié)構(gòu)“工程添加窗體工程添加窗體”“工程添加模塊工程添加模塊”“工程添加類模塊工程添加類模塊”7.5.1 模塊的分類模塊的分類一個應(yīng)用程序可以由一個應(yīng)用程序可以由組成組成.vbp-工程文件工程文件多個工程組成多個工程組成.vbg-工程組文件工程組文件“文件文件|添加工程添加工程”“工程工程|添加窗體添加窗體/添加模塊添加模塊/添加類模塊添加類模塊”窗體模塊包含:窗體模塊包含:通用聲明通用聲明(常量、變量、數(shù)組、常量、變量、數(shù)組、外部過程外部過程)、事件過程、通用過程。事件過程、通用過程??梢杂每梢杂貌榭床榭匆粋€一個窗體模塊包含窗體模塊包含了了界面界面和和代碼代碼兩部分信息兩部分信息
37、當(dāng)一個當(dāng)一個應(yīng)用程序含有應(yīng)用程序含有多個窗體多個窗體時時,如果有如果有多個窗體多個窗體都需要調(diào)用某都需要調(diào)用某一段公共過程一段公共過程,或需要共享常量、變或需要共享常量、變量等量等,則可以將則可以將這種過程這種過程或或常量、變量的聲明常量、變量的聲明建立建立在在標(biāo)準(zhǔn)模塊標(biāo)準(zhǔn)模塊內(nèi)內(nèi),定義為定義為全局常量、變量全局常量、變量或或過程過程,供各供各個窗體模塊使用。個窗體模塊使用。2. 工程工程添加模塊添加模塊選選“新建新建”標(biāo)簽標(biāo)簽打開打開“添加模塊添加模塊”對話框。對話框。默認(rèn)名字:默認(rèn)名字:ModuleXModule1,Module2.2. 標(biāo)準(zhǔn)模塊標(biāo)準(zhǔn)模塊不對應(yīng)于某個窗體、不對應(yīng)于某個窗體、
38、是是純代碼模純代碼模塊塊,因此因此標(biāo)準(zhǔn)模塊標(biāo)準(zhǔn)模塊中中沒有事件過程沒有事件過程。3. 標(biāo)準(zhǔn)模塊可以包含標(biāo)準(zhǔn)模塊可以包含: 全局常量全局常量、變量、全局過、變量、全局過程;及程;及標(biāo)準(zhǔn)模塊級常量標(biāo)準(zhǔn)模塊級常量、變量、通用過程。、變量、通用過程。4. 存盤時每個存盤時每個標(biāo)準(zhǔn)模塊標(biāo)準(zhǔn)模塊對應(yīng)一個對應(yīng)一個.Bas文件文件,默認(rèn)默認(rèn)文件主名文件主名module1,.標(biāo)準(zhǔn)模塊的添加標(biāo)準(zhǔn)模塊的添加3. 類模塊類模塊類類是具有相同或相似特征的事物的集合是具有相同或相似特征的事物的集合,類封類封裝了對象的屬性和方法。裝了對象的屬性和方法。程序員一般不對類進(jìn)行操作程序員一般不對類進(jìn)行操作,而只能對類的實而只能對
39、類的實例例對象進(jìn)行操作。對象進(jìn)行操作。VB所使用的每種控件都對應(yīng)著一個類所使用的每種控件都對應(yīng)著一個類,如如Button按鈕控件對應(yīng)著按鈕控件對應(yīng)著Button類類,它們支持它們支持封裝和多態(tài)性封裝和多態(tài)性,但它們不支持繼承但它們不支持繼承,即不能從即不能從現(xiàn)有的類來創(chuàng)建新的類?,F(xiàn)有的類來創(chuàng)建新的類。有時用戶需要創(chuàng)建自己的類以實現(xiàn)特定的功有時用戶需要創(chuàng)建自己的類以實現(xiàn)特定的功能能,則可以通過則可以通過類模塊類模塊創(chuàng)建創(chuàng)建自己的類自己的類。類模塊。類模塊文件的的擴展名為文件的的擴展名為.cls。默認(rèn)主名。默認(rèn)主名class1,.創(chuàng)建類的方法:創(chuàng)建類的方法:“工程添加類模塊工程添加類模塊”4. 過
40、程的作用域過程的作用域1. 模塊級過程模塊級過程: 在過程前如果在過程前如果加加Private關(guān)鍵關(guān)鍵字字,則這種過程只能被其所在的模塊中的其他則這種過程只能被其所在的模塊中的其他過程所調(diào)用。過程所調(diào)用。2. 全局過程全局過程: 在過程前如果在過程前如果加加Public關(guān)鍵字關(guān)鍵字(或省略或省略),則這種過程可以被其他模塊中的過則這種過程可以被其他模塊中的過程所調(diào)用。程所調(diào)用。調(diào)用格式調(diào)用格式:模塊名模塊名.過程名過程名(參數(shù)表參數(shù)表)注意:注意:標(biāo)準(zhǔn)模塊標(biāo)準(zhǔn)模塊中的中的全局過程名全局過程名如果惟一如果惟一,則則調(diào)用時調(diào)用時可以省略可以省略模塊名模塊名過程作用域的分類過程作用域的分類: 模塊級
41、模塊級、全局級全局級P2167.5.2 多重窗體多重窗體多重窗體的概念多重窗體的概念指在一個窗體內(nèi)放置或包含了多個其他窗體的結(jié)構(gòu)指在一個窗體內(nèi)放置或包含了多個其他窗體的結(jié)構(gòu),也稱也稱“多文檔界面多文檔界面”MDI(Multiple Document Interface),并稱該并稱該窗體為窗體為“父窗體父窗體”;被放置或包含的窗體稱被放置或包含的窗體稱“子窗體子窗體”MDIChild。1、添加窗體、添加窗體“工程添加窗體工程添加窗體”;或工具欄中的;或工具欄中的“添加窗體添加窗體”按鈕按鈕;“添加窗體添加窗體”對話框?qū)υ捒?對添加的窗體設(shè)置其對添加的窗體設(shè)置其:MDIChild=true。2、
42、設(shè)置、設(shè)置啟動窗體啟動窗體“工程工程XX屬性屬性”“工程屬性工程屬性”對話框?qū)υ捒蛑羞x擇中選擇“啟動對象啟動對象”3、與多重窗體程序設(shè)計有關(guān)的語句和方法、與多重窗體程序設(shè)計有關(guān)的語句和方法(1)Load語句語句格式格式:Load 窗體名稱窗體名稱功能功能: 將一個窗體裝入內(nèi)存。執(zhí)行該語句后,可以引用窗體將一個窗體裝入內(nèi)存。執(zhí)行該語句后,可以引用窗體中的控件及各種屬性,但此時窗體并沒有顯示出來。中的控件及各種屬性,但此時窗體并沒有顯示出來。(2)UnLoad語句語句格式格式:UnLoad 窗體名稱窗體名稱功能功能: 將一個窗體從內(nèi)存中刪除。常用語句將一個窗體從內(nèi)存中刪除。常用語句UnLoad m
43、e,表示關(guān)閉本窗口。表示關(guān)閉本窗口。3、與多重窗體程序設(shè)計有關(guān)的語句和方法、與多重窗體程序設(shè)計有關(guān)的語句和方法(3)Show語句語句格式格式:窗體名稱窗體名稱.show(模式模式,OwnerForm)功能:功能:用來顯示一個窗體,兼有載入和顯示窗體兩種功能用來顯示一個窗體,兼有載入和顯示窗體兩種功能如:如:Form1.Show 0, Form23、與多重窗體程序設(shè)計有關(guān)的語句和方法、與多重窗體程序設(shè)計有關(guān)的語句和方法(4)hide方法方法格式格式:窗體名窗體名.hide功能:用來隱藏窗體,兼有載入和隱藏窗體兩種功能。功能:用來隱藏窗體,兼有載入和隱藏窗體兩種功能?!纠?-18】多窗體的應(yīng)用。
44、輸入學(xué)生多窗體的應(yīng)用。輸入學(xué)生5門課程的成績,計算門課程的成績,計算總分、平均分并顯示??偡?、平均分并顯示。本例有本例有3個窗體個窗體Form1、Form2、Form3,分別作為應(yīng)用程,分別作為應(yīng)用程序的主窗體、輸入窗體、顯示窗體,還有一個標(biāo)準(zhǔn)模塊,對序的主窗體、輸入窗體、顯示窗體,還有一個標(biāo)準(zhǔn)模塊,對窗體間共用的全局變量進(jìn)行說明。窗體間共用的全局變量進(jìn)行說明。標(biāo)準(zhǔn)模塊的代碼標(biāo)準(zhǔn)模塊的代碼: Option ExplicitPublic yw%, sx%, yy%, hx%, jsj%Public zf As Single, pj As Single聲明聲明7個全局變量個全局變量,供應(yīng)供應(yīng)用程序
45、的各個模塊共用用程序的各個模塊共用 語文,數(shù)學(xué),英語,化學(xué),計算機語文,數(shù)學(xué),英語,化學(xué),計算機Form1窗體如圖窗體如圖7-16所示,是主窗體,運行后見到的第一所示,是主窗體,運行后見到的第一個窗體。單擊個窗體。單擊“輸入成績輸入成績”按鈕顯示按鈕顯示Form2,單擊單擊“計算成績計算成績”按鈕顯示按鈕顯示Form3,單擊單擊“重新計算重新計算”按鈕按鈕,顯示顯示Form1窗體窗體,單單擊擊“退出退出”按鈕,退出應(yīng)用程序。按鈕,退出應(yīng)用程序。7.5.2 多重窗體多重窗體通過通過“工程資源管理器工程資源管理器”雙擊切換至雙擊切換至form1,雙擊輸入雙擊輸入form1窗體代碼窗體代碼:Priv
46、ate Sub Command1_Click() 輸入成績按鈕輸入成績按鈕Form2.ShowCommand2.Enabled = TrueEnd SubPrivate Sub Command2_Click() 計算成績按鈕計算成績按鈕Form3.ShowCommand4.Enabled = TrueEnd SubPrivate Sub Command3_Click() 退出按鈕退出按鈕EndEnd SubPrivate Sub Command4_Click() 重新計算按鈕重新計算按鈕Load Form1Unload Form2Unload Form3Command2.Enabled = F
47、alseCommand4.Enabled = FalseEnd Sub7.5.2 多重窗體多重窗體通過通過“工程資源管理器工程資源管理器”雙擊切換至雙擊切換至form2,雙擊輸入雙擊輸入form2窗體代碼窗體代碼:Private Sub Text5_LostFocus()yw = Val(Text1.Text)sx = Val(Text2.Text)yy = Val(Text3.Text)hx = Val(Text4.Text)jsj = Val(Text5.Text)End SubPrivate Sub Form_Activate()Text1.Text = Str(yw + sx + yy
48、 + hx + jsj)Text2.Text = Str(yw + sx + yy + hx + jsj) / 5)End Sub通過通過“工程資源管理器工程資源管理器”雙擊切換至雙擊切換至form3,雙擊輸入雙擊輸入form3窗體代碼窗體代碼:7.5.3 Sub main過程過程Sub main過程過程是是標(biāo)準(zhǔn)模塊標(biāo)準(zhǔn)模塊module1.bas等等中的中的一個一個特殊過程特殊過程,主要包含主要包含一些一些應(yīng)用程序啟動時首先執(zhí)行的應(yīng)用程序啟動時首先執(zhí)行的代碼代碼,如如一些一些數(shù)據(jù)的初始化數(shù)據(jù)的初始化或根據(jù)情況或根據(jù)情況加載不同窗體加載不同窗體代碼代碼等。在等。在“工程屬性工程屬性”對話框?qū)υ捒?/p>
49、中的中的“啟動對象啟動對象”中設(shè)置中設(shè)置sub main過程過程為為啟動過程啟動過程。 Sub main過程過程又稱為又稱為“啟動過程啟動過程”。 Sub main過程過程只能定義在只能定義在標(biāo)準(zhǔn)模塊標(biāo)準(zhǔn)模塊bas中,中,且同一且同一程序程序(工程或工程組工程或工程組)中中只能定義一次該過程只能定義一次該過程,如如果果有有多個標(biāo)準(zhǔn)模塊多個標(biāo)準(zhǔn)模塊,則只能在其中之一模塊中定義一次則只能在其中之一模塊中定義一次Sub main過程過程。概念概念注意事項注意事項7.5.3 Sub Main過程過程1. 默認(rèn)默認(rèn)情況下情況下,應(yīng)用程序的第一個窗體應(yīng)用程序的第一個窗體為為啟動啟動窗體窗體,如果如果想在應(yīng)
50、用程序啟動時首先顯示其他想在應(yīng)用程序啟動時首先顯示其他窗體窗體,那么就得在那么就得在“工程屬性工程屬性”對話框?qū)υ捒蛑懈淖儐⒅懈淖儐哟绑w的名稱。動窗體的名稱。2. 如果如果希望希望應(yīng)用程序啟動時首先執(zhí)行一些代應(yīng)用程序啟動時首先執(zhí)行一些代碼碼,則則可以將這些代碼寫在可以將這些代碼寫在標(biāo)準(zhǔn)模塊標(biāo)準(zhǔn)模塊的的一個一個名名稱稱為為Main的的Sub過程過程中中,然后然后將將Main過程過程定定義為義為啟動程序啟動程序。3. 設(shè)置設(shè)置Main過程過程為為“啟動程序啟動程序”的方法的方法 “工程工程工程工程1屬性屬性”在在“工程屬性工程屬性”對話框?qū)υ捒虻牡摹皢訉ο髥訉ο蟆毕吕斜硐吕斜砜蛑锌蛑羞x擇
51、選擇“Sub Main”。相關(guān)說明相關(guān)說明77 變量的作用域變量的作用域: 指變量的指變量的有效范圍有效范圍。 變量的生存期變量的生存期: 指變量的指變量的作用時間作用時間。787.6.1 變量的作用域變量的作用域可以將變量分為可以將變量分為局部局部變量、變量、模塊模塊級變量和級變量和全局全局變量。變量。模塊級變量模塊級變量全局變量全局變量局局部部變變量量模塊模塊過程過程1. 局部變量聲明 不聲明 Dim A As Integer A每次執(zhí)行過程時被初始化 Static C As Single C在程序執(zhí)行期間保持不變作用范圍 僅在聲明的過程中起作用 其他過程中即使有同名變量,也不是指同一變量
52、。79【例7-19】 有如下程序,單擊三次Command1按鈕的結(jié)果是什么?Sub p(a As Integer)x,y 為過程中的局部變量,只在本過程有效,且每次運行該過程都會被初始化 Dim x, y x = x + 1 y = y + 2 a = a + x + y a為引用傳遞的形參,是雙向傳遞的End Sub80Private Sub Command1_Click() Dim a As Integer a為過程中的局部變量,每次運行都會被初始化 a = 1 Call p(a) 將賦值為1的實參傳給形參 Print a; 在過程改變a的值要回傳給實參,所以為4 Call p(a) 將賦值為4的實參傳給形參 Print a81程序運行的結(jié)果是:4 7
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)課題申報書范例
- 區(qū)級教師課題申報書
- 合同范本修訂
- 合伙分紅合同范本
- 微課題申報書
- 教改課題申報書怎么填
- 銜接課題申報書范文
- 員工持股合同范本
- 國家申報書課題名稱結(jié)構(gòu)
- 個人購酒合同范本
- 工資條(標(biāo)準(zhǔn)模版)
- 第四講 搜索引擎檢索
- 法語的發(fā)音規(guī)則及法語單詞分類記憶
- 水庫移民安置檔案分類大綱與編號方案
- 衛(wèi)生和微生物基礎(chǔ)知識培訓(xùn)-
- 外徑千分尺檢定證書
- ICU輪轉(zhuǎn)護(hù)士培訓(xùn)計劃和手冊
- GB/T 9787-1988熱軋等邊角鋼尺寸、外形、重量及允許偏差
- GB/T 17614.1-2015工業(yè)過程控制系統(tǒng)用變送器第1部分:性能評定方法
- 財務(wù)工作督導(dǎo)檢查記錄表
- 輿情大數(shù)據(jù)監(jiān)測平臺建設(shè)方案
評論
0/150
提交評論