版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第8章 過(guò)程過(guò)程是用來(lái)執(zhí)行一個(gè)特定任務(wù)的一段程序代碼。VB應(yīng)用程序(又稱工程或項(xiàng)目)由若干過(guò)程組成,這些過(guò)程保存在文件中,每個(gè)文件的內(nèi)容通常稱為一個(gè)模塊。在程序設(shè)計(jì)過(guò)程中,將一些常用的功能編寫成過(guò)程,可供多個(gè)不同的事件過(guò)程多次調(diào)用,從而可以減少重復(fù)編寫代碼的工作量,實(shí)現(xiàn)代碼重用,使程序簡(jiǎn)練、便于調(diào)試和維護(hù)。在VB6.0中,用戶自定義過(guò)程分為:以“Sub”保留字開始的子過(guò)程、以“Function”保留字開始的函數(shù)過(guò)程、以“Property”保留字開始的屬性過(guò)程、以“Event”保留字開始的事件過(guò)程。本章主要介紹用戶自定義的子過(guò)程和函數(shù)過(guò)程。退出8.1 子過(guò)程8.2 函數(shù)過(guò)程8.3 參數(shù)傳遞8.4
2、 過(guò)程與變量的作用域8.5 鼠標(biāo)事件和鍵盤事件8.1 子過(guò)程子過(guò)程是用特定格式組織起來(lái)的一組代碼,通常用來(lái)完成一個(gè)特定的功能,可以被其它過(guò)程作為一個(gè)整體來(lái)調(diào)用。8.1.1 子過(guò)程的定義定義子過(guò)程有以下兩種方法。1利用“工具”菜單下的“添加過(guò)程”命令定義2利用代碼窗口直接定義在窗體或標(biāo)準(zhǔn)模塊的代碼窗口把插入點(diǎn)放在所有現(xiàn)有過(guò)程之外,鍵入Sub子過(guò)程名即可。定義一般形式如下: StaticPublic|PrivateSub 子過(guò)程名(參數(shù)列表) 局部變量或常數(shù)定義 語(yǔ)句序列 Exit Sub 語(yǔ)句序列 End Sub下面是一個(gè)子過(guò)程的例子: Sub sum(x%,y%,s%) s = x + y E
3、nd Sub8.1.2 過(guò)程的調(diào)用要執(zhí)行一個(gè)過(guò)程,必須調(diào)用該過(guò)程。子過(guò)程的調(diào)用有兩種方式,一種是利用Call語(yǔ)句加以調(diào)用,另一種是把過(guò)程名作為一個(gè)語(yǔ)句來(lái)直接調(diào)用。1用Call語(yǔ)句調(diào)用Sub過(guò)程格式:Call 過(guò)程名(參數(shù)列表)例如: Call sum(a,b,c)2把過(guò)程名作為一個(gè)語(yǔ)句來(lái)使用格式: 過(guò)程名參數(shù)列表與第一種調(diào)用方法相比,這種調(diào)用方式省略了關(guān)鍵字Call,去掉了“參數(shù)列表”的括號(hào)。例如: sum a,b,c【例8.2】編一個(gè)求n!的子過(guò)程,然后調(diào)用它計(jì)算7!+11!-10!。程序如下: Sub jch(n%,p&) Dim i% p = 1 For i = 1 To n p = p
4、 * i Next i End Sub Private Sub Form_Click() Dim a&,b&,c&,d& Call jch(7,a) Call jch(11,b) Call jch(10,c) d = a + bc Print 7!+11!-10!=;d End Sub8.2 函數(shù)過(guò)程函數(shù)過(guò)程是自定義過(guò)程的另一種形式。VB提供了許多內(nèi)部函數(shù),如Sin(),Sqr()等,在編寫程序時(shí),只需寫出函數(shù)名和相應(yīng)的參數(shù),就可得到函數(shù)值。另外,VB還允許用戶自己定義函數(shù)過(guò)程。同內(nèi)部函數(shù)一樣,函數(shù)過(guò)程也有一個(gè)返回值。8.2.1 函數(shù)的定義函數(shù)過(guò)程的定義方法也有以下兩種。1利用“工具”菜單下的
5、“添加過(guò)程”命令定義2利用代碼窗口直接定義在窗體或標(biāo)準(zhǔn)模塊的代碼窗口把插入點(diǎn)放在所有現(xiàn)有過(guò)程之外,鍵入Function函數(shù)名即可。定義形式如下: StaticPublic|Private Function 函數(shù)名(參數(shù)列表)As類型 局部變量或常數(shù)定義 語(yǔ)句序列 Exit Function 語(yǔ)句序列 函數(shù)名=表達(dá)式 End Function 8.2.2 函數(shù)的調(diào)用調(diào)用函數(shù)過(guò)程可以由函數(shù)名帶回一個(gè)值給調(diào)用程序,被調(diào)用的函數(shù)必須作為表達(dá)式或表達(dá)式中的一部分,再與其它的語(yǔ)法成分一起配合使用。因此,與子過(guò)程的調(diào)用方式不同,函數(shù)不能作為單獨(dú)的語(yǔ)句加以調(diào)用。最簡(jiǎn)單的情況就是在賦值語(yǔ)句中調(diào)用函數(shù)過(guò)程,其形式
6、為: 變量名=函數(shù)過(guò)程名(參數(shù)列表)【例8.3】用函數(shù)過(guò)程實(shí)現(xiàn)對(duì)例8-2的求解。程序如下: Function jch&(n%) Dim i% jch = 1 For i = 1 To n jch = jch * i Next i End Function Private Sub Form_Click() Dim d& d = jch(7)+ jch(11)jch(10) Print 7!+11!10!=;d End Sub8.3 參數(shù)傳遞在調(diào)用過(guò)程時(shí),一般主調(diào)過(guò)程與被調(diào)過(guò)程之間有數(shù)據(jù)傳遞,即將主調(diào)過(guò)程的實(shí)參傳遞給被調(diào)過(guò)程的形參,完成實(shí)參與形參的結(jié)合,然后執(zhí)行被調(diào)過(guò)程體。在VB中,實(shí)參與形參的結(jié)
7、合有兩種方法:傳址和傳值。傳址是默認(rèn)的方法。兩種結(jié)合方法的區(qū)分標(biāo)志是“ByVal”,形參前加“ByVal”關(guān)鍵字時(shí)是傳值,否則為傳址。本章前面的舉例,例8.4是傳值,其余均為傳址。8.3.1 傳值傳值的參數(shù)傳遞過(guò)程是:當(dāng)調(diào)用一個(gè)過(guò)程時(shí),系統(tǒng)將實(shí)參的值復(fù)制給形參,之后實(shí)參與形參便斷開了聯(lián)系。被調(diào)過(guò)程對(duì)形參的操作是在形參自己的存儲(chǔ)單元中進(jìn)行,當(dāng)過(guò)程調(diào)用結(jié)束時(shí),這些形參所占用的存儲(chǔ)單元也同時(shí)被釋放。因此在過(guò)程中對(duì)形參的任何操作都不會(huì)影響到實(shí)參。8.3.2 傳址傳址的參數(shù)傳遞過(guò)程是:當(dāng)調(diào)用一個(gè)過(guò)程時(shí),它將實(shí)參的地址傳遞給形參。因此在被調(diào)過(guò)程體中對(duì)形參的任何操作都變成了對(duì)相應(yīng)實(shí)參的操作,因此實(shí)參的值就會(huì)
8、隨形參的改變而改變。當(dāng)參數(shù)是字符串或數(shù)組時(shí),使用傳址傳遞直接將實(shí)參的地址傳遞給過(guò)程,會(huì)使程序的效率提高。8.3.3 數(shù)組參數(shù)的傳遞數(shù)組可以作為過(guò)程的參數(shù)。過(guò)程定義時(shí),形參列表中的數(shù)組用數(shù)組名后的一對(duì)空的圓括號(hào)表示。在過(guò)程調(diào)用時(shí),實(shí)際參數(shù)表中的數(shù)組可以只用數(shù)組名表示,省略圓括號(hào)。當(dāng)用數(shù)組作為過(guò)程的參數(shù)時(shí),進(jìn)行的不是“值”的傳遞,而是“址”的傳遞。【例8.7】用數(shù)組作參數(shù),求一維數(shù)組中的所有負(fù)元素之和。程序如下: Function sum%(b%() Dim i% For i = LBound(b)To UBound(b) If b(i) 0 Then sum = sum + b(i) End I
9、f Next i End Function Private Sub Form_Click() Dim a%(10),s%,i% For i = 1 To 10 a(i)= Int(Rnd * 100)- 50 Print a(i); Next i Print s = sum(a() Print 數(shù)組中的負(fù)元素之和為:;s End Sub8.4 過(guò)程與變量的作用域應(yīng)用程序中的過(guò)程、變量是有作用域的。所謂作用域,就是過(guò)程、變量可以在哪些地方被使用。作用域的大小和過(guò)程、變量所處的位置及定義方式有關(guān)。8.4.1 過(guò)程的作用域這里只討論窗體和標(biāo)準(zhǔn)模塊文件。過(guò)程的作用域分為:窗體/模塊級(jí)和全局級(jí)。8.4.
10、2 變量的作用域變量的作用域決定了哪些子過(guò)程和函數(shù)過(guò)程可訪問(wèn)該變量。變量的作用域分為局部變量、窗體/模塊級(jí)變量和全局變量。表8-2中列出了3種變量作用范圍及使用規(guī)則?!纠?.10】通過(guò)本例學(xué)習(xí)不同作用域變量的使用。在Form1窗體代碼窗口輸入如下程序: Private a% 窗體/模塊級(jí)變量 Private Sub Form_Click() Dim c%,s% 局部變量 c = 20 s = a + Form2.b + c 引用各級(jí)變量 Print s=;s End Sub Private Sub Form_Load() a = 10 給窗體/模塊級(jí)變量賦值 Form2.Show End Su
11、b添加Form2窗體,在它的代碼窗口輸入如下代碼: Public b% 定義全局變量 Private Sub Form_Load() b = 30 給全局變量賦值 End Sub運(yùn)行程序,單擊Form1窗體,結(jié)果如下: s=60在本例中,我們?cè)贔orm1窗體的Click事件過(guò)程中引用了Form2窗體中定義的全局級(jí)變量b,由此可以看出在代碼窗口“通用聲明”段中用Public定義的變量確實(shí)是在整個(gè)應(yīng)用程序中起作用的。如果將Form1代碼窗口中的Form_Click事件過(guò)程做如下變動(dòng): Private Sub Form_Click() Dim c%,s%,b% 局部變量 c = 20 b = 40
12、s = a + b + c Print s=;s End Sub運(yùn)行結(jié)果變?yōu)椋?s=70結(jié)果發(fā)生了變化。原因是在VB中,當(dāng)同一應(yīng)用程序中定義了不同級(jí)別的同名變量時(shí),系統(tǒng)優(yōu)先訪問(wèn)作用域小的變量。上例改動(dòng)后,系統(tǒng)優(yōu)先訪問(wèn)了局部變量b,因此結(jié)果當(dāng)然也相應(yīng)地改變了。如果想優(yōu)先訪問(wèn)全局變量,則應(yīng)在全局變量前加上窗體/模塊名。8.4.3 靜態(tài)變量由表8-2中可知,局部變量除了用Dim語(yǔ)句聲明外,還可用Static語(yǔ)句將變量聲明為靜態(tài)變量,它在程序運(yùn)行過(guò)程中可保留變量的值。也就是說(shuō),每次調(diào)用過(guò)程后,用Static說(shuō)明的變量會(huì)保留運(yùn)行后的結(jié)果;而在過(guò)程內(nèi)用Dim說(shuō)明的變量,每次調(diào)用過(guò)程結(jié)束,都會(huì)將這些局部變量
13、釋放掉。形式如下: Static 變量名 As類型 Static Function 函數(shù)名(參數(shù)列表)As 類型 Static Sub 過(guò)程名 (參數(shù)列表)若在函數(shù)名、過(guò)程名前加Static,則表示該函數(shù)、過(guò)程內(nèi)的局部變量都是靜態(tài)變量?!纠?.11】調(diào)用函數(shù)實(shí)現(xiàn)變量自動(dòng)增1的功能。程序如下: Private Static Function s%() Dim sum% sum = sum + 1 s = sum End Function Private Sub Form_Click() Dim i% For i = 1 To 5 Print 第 & i & 次結(jié)果為 & s() Next i E
14、nd Sub8.5 鼠標(biāo)事件和鍵盤事件鼠標(biāo)對(duì)于Windows應(yīng)用程序設(shè)計(jì)來(lái)說(shuō)幾乎是必需的,尤其是在圖形圖像處理的程序設(shè)計(jì)中,顯得更為重要。而鼠標(biāo)應(yīng)用的基礎(chǔ)是鼠標(biāo)事件。下面我們就來(lái)簡(jiǎn)單介紹一下窗體鼠標(biāo)事件及其應(yīng)用。8.5.1 鼠標(biāo)事件除了單擊(Click)和雙擊(DblClick)外,基本的鼠標(biāo)事件還有3個(gè):MouseDown、MouseUp和MouseMove。工具箱中的大多數(shù)控件都能響應(yīng)這3個(gè)事件。MouseDown:鼠標(biāo)的任一鍵被按下時(shí)觸發(fā)該事件。MouseUp:鼠標(biāo)的任一鍵被釋放時(shí)觸發(fā)該事件。MouseMove:鼠標(biāo)被移動(dòng)時(shí)觸發(fā)該事件。以Form 對(duì)象為例,它們的語(yǔ)法格式為:Privat
15、e Sub Form_MouseDown(Button As Integer,Shift As Integer,X As Single,Y As Single)Private Sub Form_MouseMove(Button As Integer,Shift As Integer,X As Single,Y As Single)Private Sub Form_MouseUp(Button As Integer,Shift As Integer,X As Single,Y As Single)【例8.12】顯示鼠標(biāo)指針的當(dāng)前位置。程序如下: Private Sub Form_MouseMov
16、e(Button As Integer,_ Shift As Integer,X As Single,Y As Single) Text1.Text = X Text2.Text = Y End Sub運(yùn)行結(jié)果如圖8-6所示。8.5.2 鍵盤事件VB中的對(duì)象識(shí)別鍵盤事件,包括KeyPress、KeyUp和KeyDown事件。用戶按下并且釋放一個(gè)ANSI鍵時(shí)就會(huì)觸發(fā)KeyPress事件;用戶按下一個(gè)鍵時(shí)觸發(fā)KeyDown事件,釋放引發(fā)KeyUp事件。在引發(fā)鍵盤事件的同時(shí),用戶所按的鍵盤碼作為實(shí)參傳遞給相應(yīng)的事件過(guò)程,供程序判斷識(shí)別用戶的操作。KeyPress只響應(yīng)按下標(biāo)準(zhǔn)ASCII字符表中對(duì)應(yīng)的
17、鍵時(shí)的事件,如EnterQVFP、Tab鍵、Backspace鍵等以及標(biāo)準(zhǔn)鍵盤中的字母、標(biāo)點(diǎn)、數(shù)字鍵等。而KeyDown和KeyUP則提供了最低級(jí)的鍵盤響應(yīng)。它們的格式如下:Sub Object_KeyPress(Index As Integer, KeyAscii As Integer)Sub Object_KeyDown(Index As Integer, KeyCode As Integer,Shift As Integer)Sub Object_KeyUp(Index As Integer, KeyCode As Integer,Shift As Integer)【例8-14】在窗體上放一文本框,編寫一事件過(guò)程,保證在該文本框內(nèi)只能輸入字母,且無(wú)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025電視機(jī)買賣合同范本
- 二零二五年度新材料研發(fā)借款協(xié)議3篇
- 二零二五年度電子商務(wù)散伙協(xié)議書3篇
- 二零二五年度公司對(duì)公租賃房屋物業(yè)管理合同2篇
- 2025年度年度文化旅游股份收購(gòu)?fù)顿Y合同3篇
- 二零二五年度股東間戰(zhàn)略聯(lián)盟合作協(xié)議書3篇
- 2025年度農(nóng)村合作社農(nóng)村電商直播培訓(xùn)合同
- 2025年農(nóng)村環(huán)境衛(wèi)生保潔與農(nóng)村環(huán)境保護(hù)法律法規(guī)執(zhí)行合同
- 2025年度全新工業(yè)機(jī)器人價(jià)格保密協(xié)議3篇
- 2025年度軍人保密協(xié)議與軍事設(shè)施維護(hù)保密合同3篇
- GB/T 44890-2024行政許可工作規(guī)范
- 軍工合作合同范例
- 2025年中國(guó)稀土集團(tuán)總部部分崗位社會(huì)公開招聘管理單位筆試遴選500模擬題附帶答案詳解
- 超市柜臺(tái)長(zhǎng)期出租合同范例
- 廣東省廣州市2025屆高三上學(xué)期12月調(diào)研測(cè)試語(yǔ)文試題(含答案)
- 【8物(科)期末】合肥市第四十五中學(xué)2023-2024學(xué)年八年級(jí)上學(xué)期期末物理試題
- 統(tǒng)編版2024-2025學(xué)年三年級(jí)語(yǔ)文上冊(cè)期末學(xué)業(yè)質(zhì)量監(jiān)測(cè)試卷(含答案)
- 從0 開始運(yùn)營(yíng)抖?音號(hào)sop 文檔
- Module7 Unit2 This little girl can't walk(Period 1) (教學(xué)實(shí)錄) -2024-2025學(xué)年外研版(三起)英語(yǔ)五年級(jí)上冊(cè)
- 施工臨建布置方案
- 2024年01月11190當(dāng)代中國(guó)政治制度期末試題答案
評(píng)論
0/150
提交評(píng)論