VB程序設(shè)計08_第1頁
VB程序設(shè)計08_第2頁
VB程序設(shè)計08_第3頁
VB程序設(shè)計08_第4頁
VB程序設(shè)計08_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第8章 過程過程是用來執(zhí)行一個特定任務(wù)的一段程序代碼。VB應(yīng)用程序(又稱工程或項目)由若干過程組成,這些過程保存在文件中,每個文件的內(nèi)容通常稱為一個模塊。在程序設(shè)計過程中,將一些常用的功能編寫成過程,可供多個不同的事件過程多次調(diào)用,從而可以減少重復(fù)編寫代碼的工作量,實現(xiàn)代碼重用,使程序簡練、便于調(diào)試和維護。在VB6.0中,用戶自定義過程分為:以“Sub”保留字開始的子過程、以“Function”保留字開始的函數(shù)過程、以“Property”保留字開始的屬性過程、以“Event”保留字開始的事件過程。本章主要介紹用戶自定義的子過程和函數(shù)過程。退出8.1 子過程8.2 函數(shù)過程8.3 參數(shù)傳遞8.4

2、 過程與變量的作用域8.5 鼠標(biāo)事件和鍵盤事件8.1 子過程子過程是用特定格式組織起來的一組代碼,通常用來完成一個特定的功能,可以被其它過程作為一個整體來調(diào)用。8.1.1 子過程的定義定義子過程有以下兩種方法。1利用“工具”菜單下的“添加過程”命令定義2利用代碼窗口直接定義在窗體或標(biāo)準(zhǔn)模塊的代碼窗口把插入點放在所有現(xiàn)有過程之外,鍵入Sub子過程名即可。定義一般形式如下: StaticPublic|PrivateSub 子過程名(參數(shù)列表) 局部變量或常數(shù)定義 語句序列 Exit Sub 語句序列 End Sub下面是一個子過程的例子: Sub sum(x%,y%,s%) s = x + y E

3、nd Sub8.1.2 過程的調(diào)用要執(zhí)行一個過程,必須調(diào)用該過程。子過程的調(diào)用有兩種方式,一種是利用Call語句加以調(diào)用,另一種是把過程名作為一個語句來直接調(diào)用。1用Call語句調(diào)用Sub過程格式:Call 過程名(參數(shù)列表)例如: Call sum(a,b,c)2把過程名作為一個語句來使用格式: 過程名參數(shù)列表與第一種調(diào)用方法相比,這種調(diào)用方式省略了關(guān)鍵字Call,去掉了“參數(shù)列表”的括號。例如: sum a,b,c【例8.2】編一個求n!的子過程,然后調(diào)用它計算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ù)過程函數(shù)過程是自定義過程的另一種形式。VB提供了許多內(nèi)部函數(shù),如Sin(),Sqr()等,在編寫程序時,只需寫出函數(shù)名和相應(yīng)的參數(shù),就可得到函數(shù)值。另外,VB還允許用戶自己定義函數(shù)過程。同內(nèi)部函數(shù)一樣,函數(shù)過程也有一個返回值。8.2.1 函數(shù)的定義函數(shù)過程的定義方法也有以下兩種。1利用“工具”菜單下的

5、“添加過程”命令定義2利用代碼窗口直接定義在窗體或標(biāo)準(zhǔn)模塊的代碼窗口把插入點放在所有現(xiàn)有過程之外,鍵入Function函數(shù)名即可。定義形式如下: StaticPublic|Private Function 函數(shù)名(參數(shù)列表)As類型 局部變量或常數(shù)定義 語句序列 Exit Function 語句序列 函數(shù)名=表達(dá)式 End Function 8.2.2 函數(shù)的調(diào)用調(diào)用函數(shù)過程可以由函數(shù)名帶回一個值給調(diào)用程序,被調(diào)用的函數(shù)必須作為表達(dá)式或表達(dá)式中的一部分,再與其它的語法成分一起配合使用。因此,與子過程的調(diào)用方式不同,函數(shù)不能作為單獨的語句加以調(diào)用。最簡單的情況就是在賦值語句中調(diào)用函數(shù)過程,其形式

6、為: 變量名=函數(shù)過程名(參數(shù)列表)【例8.3】用函數(shù)過程實現(xiàn)對例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)用過程時,一般主調(diào)過程與被調(diào)過程之間有數(shù)據(jù)傳遞,即將主調(diào)過程的實參傳遞給被調(diào)過程的形參,完成實參與形參的結(jié)合,然后執(zhí)行被調(diào)過程體。在VB中,實參與形參的結(jié)

7、合有兩種方法:傳址和傳值。傳址是默認(rèn)的方法。兩種結(jié)合方法的區(qū)分標(biāo)志是“ByVal”,形參前加“ByVal”關(guān)鍵字時是傳值,否則為傳址。本章前面的舉例,例8.4是傳值,其余均為傳址。8.3.1 傳值傳值的參數(shù)傳遞過程是:當(dāng)調(diào)用一個過程時,系統(tǒng)將實參的值復(fù)制給形參,之后實參與形參便斷開了聯(lián)系。被調(diào)過程對形參的操作是在形參自己的存儲單元中進(jìn)行,當(dāng)過程調(diào)用結(jié)束時,這些形參所占用的存儲單元也同時被釋放。因此在過程中對形參的任何操作都不會影響到實參。8.3.2 傳址傳址的參數(shù)傳遞過程是:當(dāng)調(diào)用一個過程時,它將實參的地址傳遞給形參。因此在被調(diào)過程體中對形參的任何操作都變成了對相應(yīng)實參的操作,因此實參的值就會

8、隨形參的改變而改變。當(dāng)參數(shù)是字符串或數(shù)組時,使用傳址傳遞直接將實參的地址傳遞給過程,會使程序的效率提高。8.3.3 數(shù)組參數(shù)的傳遞數(shù)組可以作為過程的參數(shù)。過程定義時,形參列表中的數(shù)組用數(shù)組名后的一對空的圓括號表示。在過程調(diào)用時,實際參數(shù)表中的數(shù)組可以只用數(shù)組名表示,省略圓括號。當(dāng)用數(shù)組作為過程的參數(shù)時,進(jìn)行的不是“值”的傳遞,而是“址”的傳遞?!纠?.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 過程與變量的作用域應(yīng)用程序中的過程、變量是有作用域的。所謂作用域,就是過程、變量可以在哪些地方被使用。作用域的大小和過程、變量所處的位置及定義方式有關(guān)。8.4.1 過程的作用域這里只討論窗體和標(biāo)準(zhǔn)模塊文件。過程的作用域分為:窗體/模塊級和全局級。8.4.

10、2 變量的作用域變量的作用域決定了哪些子過程和函數(shù)過程可訪問該變量。變量的作用域分為局部變量、窗體/模塊級變量和全局變量。表8-2中列出了3種變量作用范圍及使用規(guī)則。【例8.10】通過本例學(xué)習(xí)不同作用域變量的使用。在Form1窗體代碼窗口輸入如下程序: Private a% 窗體/模塊級變量 Private Sub Form_Click() Dim c%,s% 局部變量 c = 20 s = a + Form2.b + c 引用各級變量 Print s=;s End Sub Private Sub Form_Load() a = 10 給窗體/模塊級變量賦值 Form2.Show End Su

11、b添加Form2窗體,在它的代碼窗口輸入如下代碼: Public b% 定義全局變量 Private Sub Form_Load() b = 30 給全局變量賦值 End Sub運行程序,單擊Form1窗體,結(jié)果如下: s=60在本例中,我們在Form1窗體的Click事件過程中引用了Form2窗體中定義的全局級變量b,由此可以看出在代碼窗口“通用聲明”段中用Public定義的變量確實是在整個應(yīng)用程序中起作用的。如果將Form1代碼窗口中的Form_Click事件過程做如下變動: Private Sub Form_Click() Dim c%,s%,b% 局部變量 c = 20 b = 40

12、s = a + b + c Print s=;s End Sub運行結(jié)果變?yōu)椋?s=70結(jié)果發(fā)生了變化。原因是在VB中,當(dāng)同一應(yīng)用程序中定義了不同級別的同名變量時,系統(tǒng)優(yōu)先訪問作用域小的變量。上例改動后,系統(tǒng)優(yōu)先訪問了局部變量b,因此結(jié)果當(dāng)然也相應(yīng)地改變了。如果想優(yōu)先訪問全局變量,則應(yīng)在全局變量前加上窗體/模塊名。8.4.3 靜態(tài)變量由表8-2中可知,局部變量除了用Dim語句聲明外,還可用Static語句將變量聲明為靜態(tài)變量,它在程序運行過程中可保留變量的值。也就是說,每次調(diào)用過程后,用Static說明的變量會保留運行后的結(jié)果;而在過程內(nèi)用Dim說明的變量,每次調(diào)用過程結(jié)束,都會將這些局部變量

13、釋放掉。形式如下: Static 變量名 As類型 Static Function 函數(shù)名(參數(shù)列表)As 類型 Static Sub 過程名 (參數(shù)列表)若在函數(shù)名、過程名前加Static,則表示該函數(shù)、過程內(nèi)的局部變量都是靜態(tài)變量?!纠?.11】調(diào)用函數(shù)實現(xiàn)變量自動增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)對于Windows應(yīng)用程序設(shè)計來說幾乎是必需的,尤其是在圖形圖像處理的程序設(shè)計中,顯得更為重要。而鼠標(biāo)應(yīng)用的基礎(chǔ)是鼠標(biāo)事件。下面我們就來簡單介紹一下窗體鼠標(biāo)事件及其應(yīng)用。8.5.1 鼠標(biāo)事件除了單擊(Click)和雙擊(DblClick)外,基本的鼠標(biāo)事件還有3個:MouseDown、MouseUp和MouseMove。工具箱中的大多數(shù)控件都能響應(yīng)這3個事件。MouseDown:鼠標(biāo)的任一鍵被按下時觸發(fā)該事件。MouseUp:鼠標(biāo)的任一鍵被釋放時觸發(fā)該事件。MouseMove:鼠標(biāo)被移動時觸發(fā)該事件。以Form 對象為例,它們的語法格式為: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運行結(jié)果如圖8-6所示。8.5.2 鍵盤事件VB中的對象識別鍵盤事件,包括KeyPress、KeyUp和KeyDown事件。用戶按下并且釋放一個ANSI鍵時就會觸發(fā)KeyPress事件;用戶按下一個鍵時觸發(fā)KeyDown事件,釋放引發(fā)KeyUp事件。在引發(fā)鍵盤事件的同時,用戶所按的鍵盤碼作為實參傳遞給相應(yīng)的事件過程,供程序判斷識別用戶的操作。KeyPress只響應(yīng)按下標(biāo)準(zhǔn)ASCII字符表中對應(yīng)的

17、鍵時的事件,如EnterQVFP、Tab鍵、Backspace鍵等以及標(biāo)準(zhǔn)鍵盤中的字母、標(biāo)點、數(shù)字鍵等。而KeyDown和KeyUP則提供了最低級的鍵盤響應(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】在窗體上放一文本框,編寫一事件過程,保證在該文本框內(nèi)只能輸入字母,且無

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論