VB基礎(chǔ)教程第5章.ppt_第1頁(yè)
VB基礎(chǔ)教程第5章.ppt_第2頁(yè)
VB基礎(chǔ)教程第5章.ppt_第3頁(yè)
VB基礎(chǔ)教程第5章.ppt_第4頁(yè)
VB基礎(chǔ)教程第5章.ppt_第5頁(yè)
已閱讀5頁(yè),還剩54頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第5章 過 程,5.1 過程的定義與調(diào)用 5.2 變量的作用域,5.1 過程的定義與調(diào)用,在VB中是用過程來(lái)實(shí)現(xiàn)程序模塊的。將一個(gè)程序分成若干個(gè)相對(duì)獨(dú)立的過程,每個(gè)過程可實(shí)現(xiàn)單一的功能。由于各個(gè)模塊的層次分明,因此也便于程序的閱讀。VB除了可以使用前面已介紹的事件過程外,還可以使用Sub過程(子程序)和 Function過程(函數(shù))。,5.1.1 Sub過程的定義與調(diào)用,【例5.1】在窗體上添加兩個(gè)命令按鈕。,單擊時(shí), 顯示10個(gè)*,單擊時(shí),根據(jù)輸入框中輸入的整數(shù),顯示n個(gè)*,Private Sub Command1_Click() Callprt(10) End Sub Private Su

2、b Command2_Click() n% = Val(InputBox(“請(qǐng)輸入整數(shù):”) If n% 0 Then Call prt(n%) Else Exit Sub End If Print $ $ $ $ $ End Sub,調(diào)用名為prt的Sub過程,退出本命令按鈕的單擊事件過程,Private Sub prt(n As Integer) For i = 1 To n Print * ; Next i Print End Sub,定義名為prt的Sub過程,換行,說明:,程序中的第3個(gè)模塊編寫了兩個(gè)單擊事件都需要使用的一段代碼,該模塊叫做子程序(Sub)過程。子程序過程不與任何特定

3、的事件相聯(lián)系,而是被其他的過程來(lái)調(diào)用。調(diào)用子程序過程相當(dāng)于執(zhí)行該過程的程序代碼(執(zhí)行后返回到主調(diào)過程,并繼續(xù)執(zhí)行調(diào)用處下面的語(yǔ)句)。,Private|PublicStaticSub 子程序名 (形參列表) 語(yǔ)句組1 Exit Sub 語(yǔ)句組2 End Sub,子程序過程的一般定義格式為:,強(qiáng)制退出子程序,關(guān)鍵字Private和Public中最多只能選其一。使用Private,表示該過程是私有的局部過程,只能被該過程所在的窗體或標(biāo)準(zhǔn)模塊中的其他過程所調(diào)用。使用Public,表示該過程是公共的全局過程,可被應(yīng)用程序中的任何窗體或任何標(biāo)準(zhǔn)模塊中的過程所調(diào)用。VB默認(rèn)所有標(biāo)準(zhǔn)模塊中的子程序是Publi

4、c。關(guān)鍵字Static的作用在5.2節(jié)中介紹。,格式說明:,第一種形式:Call 子程序名(實(shí)參列表) 第二種形式:子程序名實(shí)參列表,調(diào)用子程序過程的一般形式:,若帶有實(shí)參,則實(shí)參必須用括號(hào)括起,實(shí)參可直接加在子程序名后面,【例5.2】按值和按地址傳遞參數(shù)示例。根據(jù)下圖所示的窗體設(shè)計(jì)界面。,單擊時(shí),觀察運(yùn)行結(jié)果,程序代碼:,Private Sub Command1_Click() a$ = Text1.Text b$ = Text2.Text Call swap(a$), b$) Text1.Text = a$ Text2.Text = b$ End Sub Private Sub swap(

5、a As String,b As String) t$ = a a = b b = t$ End Sub,調(diào)用swap子程序,定義名為swap的Sub過程,實(shí)參形式不同,說明:,調(diào)用語(yǔ)句中的實(shí)參(a$)和b$形式不同,表示的意義也是不同的。 (a$):在被調(diào)過程中對(duì)形參的任何改變,都不會(huì)影響實(shí)參變量本身 b$:在被調(diào)過程中對(duì)形參的任何操作,都意味著對(duì)實(shí)參的操作,VB除了用加括弧的方式區(qū)分按值或按址傳遞參數(shù)外,還可以在定義過程時(shí),在相應(yīng)的形參前加關(guān)鍵字ByVal或ByRef表示。按址傳遞是默認(rèn)方式,【例5.3】在窗體上添加兩個(gè)文本框和兩個(gè)命令按鈕。,單擊時(shí),交換兩個(gè)文本框中的內(nèi)容,單擊時(shí),顯示3

6、個(gè)文本框中的最大值,切換到第2個(gè)窗體,回到第1個(gè)窗體,Public Sub swap(x As String,y As String) t$ = x x = y y = t$ End Sub,在標(biāo)準(zhǔn)模塊中定義的全局過程的程序代碼:,定義名為swap的全局級(jí)子程序,Private Sub Command1_Click() a$ = Text1.Text b$ = Text2.Text Call swap(a$, b$) Text1.Text = a$ Text2.Text = b$ End Sub Private Sub Command2_Click() Form2.Show Form1.Hid

7、e End Sub,窗體1程序代碼:,調(diào)用名為swap的子程序,Private Sub Command1_Click() a$ = Text1.Text b$ = Text2.Text c$ = Text3.Text d$ = a$ If Val(d$) Val(b$) Then Call swap(d$, b$) If Val(d$) Val(c$) Then Call swap(d$, c$) Text4.Text = d$ End Sub Private Sub Command2_Click() Form1.Show Form2.Hide End Sub,窗體2程序代碼:,d$、b$按址

8、傳給swap中的形參x,y,在標(biāo)準(zhǔn)模塊的聲明段中用關(guān)鍵字Public定義的子程序?yàn)槿旨?jí)子程序,這種子程序可被應(yīng)用程序中的任何模塊所調(diào)用。本例中Form1和Form2窗體就分別調(diào)用了全局級(jí)子程序swap,完成相同的交換功能;,說明:,【例5.4】函數(shù)過程的示例。在窗體上添加兩個(gè)標(biāo)簽、兩個(gè)文本框和兩個(gè)命令按鈕。,單擊時(shí),計(jì)算1n之間所有數(shù)之和,單擊時(shí),計(jì)算1n之間所有數(shù)的平均值,Private Sub Command1_Click() Text2.Text = sum(Val(Text1.Text) Label2.Caption = “總和是” End Sub Private Sub Comma

9、nd2_Click() n% = Val(Text1.Text) Text2.Text = sum(n%) / n% Label2.Caption = “平均值是” End Sub,調(diào)用sum函數(shù)過程,程序代碼:,Private Function sum(n As Integer) For i = 1 To n s = s + I Next I sum = s End Function,定義名為sum的函數(shù)過程,為函數(shù)名sum 賦值,本例用到過程的另一種形式:函數(shù)過程。在解決實(shí)際問題時(shí),如果沒有現(xiàn)成的函數(shù)可用時(shí),我們可以自定義函數(shù)過程。函數(shù)過程同Sub過程一樣也是由一段獨(dú)立的代碼組成,可以被某

10、個(gè)過程多次調(diào)用,說明:,Private|PublicStatic Function 函數(shù)名 (形參列表)As 類型 語(yǔ)句組1 函數(shù)名=函數(shù)返回結(jié)果 Exit Function 語(yǔ)句組2 函數(shù)名=函數(shù)返回結(jié)果 End Function,定義函數(shù)過程的一般格式為:,在函數(shù)體內(nèi)至少 對(duì)函數(shù)名賦值一次,函數(shù)過程的調(diào)用同標(biāo)準(zhǔn)函數(shù)調(diào)用,其形式為: 函數(shù)過程名(實(shí)參列表) 注意: 實(shí)參數(shù)列表中的個(gè)數(shù)必須與形參個(gè)數(shù)相同,位置與類型一一對(duì)應(yīng)。可以是同類型的常量、變量、表達(dá)式。,函數(shù)過程的調(diào)用,【例5.5】計(jì)算1!+2!+3!+20!的值。在窗體上添加一個(gè)標(biāo)簽、一個(gè)文本框和兩個(gè)命令按鈕。,單擊時(shí),顯示出120之間

11、各階乘的和,單擊時(shí),退出程序,Private Sub Command1_Click() Dim m As Integer, jsum As Single For m = 1 To 20 jsum = jsum + jch(m) Next m Text1.Text=”1!+ 2!+ 3!+ + 20!=” & jsum End Sub,Private Function jch(n As Integer) As Single Dim i As Integer, fac As Single fac = 1 For i = 1 To n fac = fac * i Next i jch = fac E

12、nd Function,將n!的結(jié)果賦值給函數(shù)名jch,調(diào)用函數(shù)jch,變量jsum的作用是存放1!、2!、20!的累加和。 在循環(huán)體中,每次調(diào)用函數(shù)jch時(shí),將循環(huán)控制變量m作為實(shí)參發(fā)送到函數(shù)過程的形參中,作為當(dāng)前要計(jì)算的n! 在函數(shù)過程中,將計(jì)算n!的結(jié)果fac賦值給函數(shù)名jch,返回給主調(diào)程序的調(diào)用處,說明:,【例5.6】從鍵盤上輸入一個(gè)正整數(shù),判斷該數(shù)是否為素?cái)?shù)。在窗體上添加一個(gè)標(biāo)簽、一個(gè)文本框和兩個(gè)命令按鈕。,判斷輸入的數(shù)是否為素?cái)?shù),顯示3 至輸入的數(shù)之間所有素?cái)?shù),Private Function isprime(a) As String k% = Int(Sqr(a) For i%

13、 = 2 To k% If a Mod i% = 0 Then Exit For Next i% If i% = k% + 1 Then isprime = 1 Else isprime = 0 End If End Function,判斷是否為素?cái)?shù)的函數(shù)過程,程序代碼:,若a是素?cái)?shù),返回1;否則返回0,若找到一個(gè)能整除a的數(shù),就能斷定a不是素?cái)?shù),此時(shí)應(yīng)提前退出循環(huán),Private Sub Command1_Click() Text1.SetFocus n = Val(Text1.Text) If isprime(n) = 1 Then m = n & “是素?cái)?shù)” Else m = n & “

14、不是素?cái)?shù)” End If MsgBox m, , “判斷素?cái)?shù)” End Sub,將函數(shù)isprime的返回值作為條件進(jìn)行邏輯判斷,Private Sub Command2_Click() x = Val(Text1.Text) For j = 3 To x If isprime(j) = 1 Then y$ = y$ & & j End If Next j MsgBox y$, , “顯示素?cái)?shù)” End Sub,顯示3至輸入的數(shù)之間所有素?cái)?shù),說明:,函數(shù)過程isprime判斷輸入的數(shù)是否為素?cái)?shù),若是,則函數(shù)返回結(jié)果為1,否則返回0; 在Command1_Click事件中,根據(jù)函數(shù)返回結(jié)果,顯示

15、該數(shù)是否為素?cái)?shù); 在Command2_Click事件中,根據(jù)所輸入的x,調(diào)用函數(shù)isprime依次判斷3、4、x是否為素?cái)?shù),然后將其中的素?cái)?shù)連接起來(lái)送到變量y$中,最后再顯示該變量中的字符串。,5.2 變量的作用域,一個(gè)VB應(yīng)用程序可以包含若干個(gè)過程,這些過程可以出現(xiàn)在窗體或標(biāo)準(zhǔn)模塊中,而且在過程中必不可少的要使用變量。變量在程序中所處的位置不同,其使用的范圍也不同,我們將變量的有效范圍稱為變量的作用域。變量按其作用域分為局部變量、窗體/模塊級(jí)變量、全局變量。,在過程內(nèi)部聲明的變量稱為局部變量。它是用Dim語(yǔ)句聲明(若該變量是靜態(tài)的,則用Static語(yǔ)句,參見5.2.4節(jié))或不聲明而直接使用。

16、局部變量只能在聲明它的過程中有效。,5.2.1 局部變量的作用域,【例5.7】在窗體上添加一個(gè)文本框和兩個(gè)命令按鈕。,單擊時(shí),觀察運(yùn)行結(jié)果,單擊時(shí),觀察運(yùn)行結(jié)果,Private Sub cmdTest1_Click() Dim a As Integer a = a + 1 Text1.Text = a End Sub Private Sub cmdTest2_Click() Dim a As Integer Text1.Text = a End Sub,聲明局部變量,程序代碼:,在一個(gè)過程中用Dim語(yǔ)句聲明的局部變量,只有當(dāng)程序執(zhí)行該過程時(shí)才存在。當(dāng)該過程執(zhí)行結(jié)束時(shí),系統(tǒng)立即釋放變量所占用的內(nèi)

17、存單元,說明:,本例分別在兩個(gè)事件過程中,聲明了兩個(gè)同名變量a,但它們彼此互不影響,各自在自己所在的過程中起作用。,在一個(gè)窗體/模塊的任何過程之外聲明的變量稱為窗體/模塊級(jí)變量。它是在“通用”段中用Dim語(yǔ)句或Private語(yǔ)句聲明的,可以在聲明它的窗體/模塊的任何過程中使用,但在其他窗體/模塊中是無(wú)效的。,5.2.2 窗體/模塊級(jí)變量的作用域,【例5.8】在窗體1上添加一個(gè)文本框和3個(gè)命令按鈕,而在窗體2上添加一個(gè)文本框和2個(gè)命令按鈕。,單擊10次,單擊時(shí),觀察運(yùn)行結(jié)果,單擊時(shí),切換到窗體1,觀察結(jié)果,切換到第2個(gè)窗體,Dim a As Integer Private Sub cmdTest

18、_Click() a = a + 1 End Sub Private Sub cmdShow_Click() Text1.Text = a End Sub Private Sub cmdSwitch_Click() frmEx5_8_1.Hide frmEx5_8_2.Show End Sub,聲明窗體/模塊級(jí)變量,窗體1的代碼:,在兩個(gè)事件過程中使用的a是同一個(gè)變量(窗體級(jí)變量),Private Sub cmdDisplay_Click() Text1.Text = a If a = ” ” Then MsgBox “a中存放空串!”, , “顯示” End Sub Private Sub

19、cmdExit_Click() frmEx5_8_1.Show frmEx5_8_2.Hide End Sub,窗體2的代碼:,直接使用局部變量a,說明:,如果需要在一個(gè)窗體或模塊的不同過程中均使用同一個(gè)變量,就需要將它定義為一個(gè)窗體或模塊級(jí)變量。,在第一個(gè)窗體中聲明窗體級(jí)變量a后,在該窗體的任何過程中都可使用這個(gè)變量,但在其他窗體中不能使用。當(dāng)關(guān)閉一個(gè)窗體時(shí),該窗體級(jí)的變量全部被釋放; 在第二個(gè)窗體中直接使用了一個(gè)同名的變量a,沒有聲明直接使用的變量是局部變量,該變量只能在包含它的過程中使用,與第一個(gè)窗體中聲明的變量a互不干涉。,全局變量可以在整個(gè)應(yīng)用程序中使用,其值始終不會(huì)消失和重新初始化

20、,只有當(dāng)應(yīng)用程序執(zhí)行結(jié)束時(shí),全局變量才消失并釋放所占用的內(nèi)存空間。,5.2.3 全局變量的作用域,【例5.9】在窗體1上添加一個(gè)文本框和3個(gè)命令按鈕。在窗體2上添加一個(gè)文本框和2個(gè)命令按鈕。,單擊10次,觀察結(jié)果,單擊時(shí),觀察運(yùn)行結(jié)果,單擊時(shí),切換到窗體1,Public a As Integer Private Sub cmdTest_Click() a = a + 1 End Sub Private Sub cmdShow_Click() Text1.Text = a End Sub Private Sub cmdSwitch_Click() frmEx5_9_1.Hide frmEx5_9

21、_2.Show End Sub,聲明全局變量,窗體1的代碼:,顯示全局變量的值,窗體2的代碼:,Private Sub cmdDisplay_Click() Text1.Text = frmEx5_9_1.a End Sub Private Sub cmdExit_Click() frmEx5_9_1.Show frmEx5_9_2.Hide End Sub,要在當(dāng)前聲明全局變量的窗體之外使用該變量時(shí),應(yīng)在變量名前加窗體名,說明:,如果需要在整個(gè)應(yīng)用程序中的任一窗體或標(biāo)準(zhǔn)模塊中使用同一個(gè)變量,就需要將它定義為全局變量。如本例在Form1的“通用”段中聲明Public a As Integer后,變量a就可在整個(gè)應(yīng)用程序中被使用。,【例5.10】在例5.9基礎(chǔ)上改寫應(yīng)用程序:添加一個(gè)標(biāo)準(zhǔn)模塊Module1,并將程序代碼按如下改寫: 將窗體1代碼中的變量聲明語(yǔ)句Public a As Integer移到標(biāo)準(zhǔn)模塊Module1中; 將窗體2代碼中cmdDisplay_Click事件的語(yǔ)句Text1.Text = frmEx5_9_1.a改寫為Text1.Text = a,其他語(yǔ)句不變; 窗體界面不變。觀察單擊10次“測(cè)試”按鈕后,再單擊“查看”按鈕時(shí)的運(yùn)行結(jié)果和單擊“顯示”按鈕時(shí)的運(yùn)行結(jié)果。,說明:,標(biāo)準(zhǔn)模塊是由程序代碼組成的獨(dú)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論