VB序設(shè)計(jì)初步_第1頁(yè)
VB序設(shè)計(jì)初步_第2頁(yè)
VB序設(shè)計(jì)初步_第3頁(yè)
VB序設(shè)計(jì)初步_第4頁(yè)
VB序設(shè)計(jì)初步_第5頁(yè)
已閱讀5頁(yè),還剩65頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第四章 vb程序設(shè)計(jì) 在設(shè)計(jì)一個(gè)規(guī)模較大、功能較復(fù)雜的程序時(shí),需在設(shè)計(jì)一個(gè)規(guī)模較大、功能較復(fù)雜的程序時(shí),需要按功能將程序分解成若干個(gè)相互獨(dú)立的部件,要按功能將程序分解成若干個(gè)相互獨(dú)立的部件,vb稱這些部件為過(guò)程。稱這些部件為過(guò)程。 在程序編寫(xiě)時(shí),分別對(duì)每個(gè)在程序編寫(xiě)時(shí),分別對(duì)每個(gè)“過(guò)程過(guò)程”編寫(xiě)程序,編寫(xiě)程序,可以簡(jiǎn)化程序設(shè)計(jì)任務(wù)??梢院?jiǎn)化程序設(shè)計(jì)任務(wù)。 本章主要對(duì)工程、模塊和過(guò)程進(jìn)行介紹。本章主要對(duì)工程、模塊和過(guò)程進(jìn)行介紹。4.1 文件類型vb應(yīng)用程序由擴(kuò)展名為.vbp、.frm、.frx、.bas、.cls等幾種類型的文件組成。1. 窗體文件(.frm)包含窗體、控件的描述和屬性設(shè)置,也包

2、含窗體級(jí)的常數(shù)、變量、外部過(guò)程的聲明,以及事件過(guò)程和一般過(guò)程。如果程序沒(méi)有frm窗體文件,則表示沒(méi)有用戶界面。2. 窗體的二進(jìn)制數(shù)據(jù)文件(.frx)含有窗體上控件的二進(jìn)制屬性數(shù)據(jù)。這些文件是在創(chuàng)建窗體時(shí)自動(dòng)產(chǎn)生的。4.1 文件類型3. 標(biāo)準(zhǔn)模塊文件(.bas)用于存放幾個(gè)窗體中都需要用的公共代碼,包含常數(shù)、類型、變量和過(guò)程的聲明,以及過(guò)程代碼。4.類模塊文件(.cls)用于建立新對(duì)象,這些新對(duì)象可以包含自定義的屬性和方法。類模塊即包含代碼又包含數(shù)據(jù),可被應(yīng)用程序內(nèi)的過(guò)程調(diào)用。4.1 文件類型5.工程文件(.vbp)工程文件包含組成應(yīng)用程序的所有窗體文件(.frm)、模塊文件(.bas)和其它文

3、件,也包含環(huán)境設(shè)置選項(xiàng)方面的信息。工程的操作: 打開(kāi)和保存工程:通過(guò)“文件”菜單進(jìn)行打開(kāi)和保存工作 設(shè)置工程屬性:“工程”菜單,“工程屬性”對(duì)話框操作 添加工程:工具欄或“文件”菜單添加已有工程或新建工程添加多個(gè)工程可組成工程組 刪除工程:“工程資源管理器”中通過(guò)右鍵快捷菜單 向工程中添加和刪除文件:工具欄或“工程”菜單4.2 過(guò)程將較為復(fù)雜的程序分割成較小的邏輯部件,這些部件稱為過(guò)程。u 每個(gè)過(guò)程為一段程序,一個(gè)過(guò)程可以被另一個(gè)過(guò)程調(diào)用。u 多個(gè)過(guò)程構(gòu)成一個(gè)完整、復(fù)雜的應(yīng)用程序。u 將應(yīng)用程序分解成過(guò)程進(jìn)行分別調(diào)試,可極大地簡(jiǎn)化程序設(shè)計(jì)任務(wù)。4.2 過(guò)程應(yīng)用程序工程文件窗體文件多個(gè)過(guò)程標(biāo)準(zhǔn)模

4、塊文件多個(gè)過(guò)程類模塊文件多個(gè)過(guò)程工程文件應(yīng)用程序的組成:4.2 過(guò)程過(guò)程的分類:u 子程序過(guò)程(sub procedure)子程序過(guò)程沒(méi)有返回值u 函數(shù)過(guò)程(function procedure)函數(shù)過(guò)程具有返回值,如asin(x)u 屬性過(guò)程(property procedure)屬性過(guò)程可以返回和設(shè)置窗體、標(biāo)準(zhǔn)模塊和類模塊,也可以設(shè)置對(duì)象的屬性。vb的所有可執(zhí)行代碼必須屬于某個(gè)過(guò)程。的所有可執(zhí)行代碼必須屬于某個(gè)過(guò)程。過(guò)程的定義是平行的,不能在一個(gè)過(guò)程中定義其它過(guò)程。過(guò)程的定義是平行的,不能在一個(gè)過(guò)程中定義其它過(guò)程。4.2.1 sub過(guò)程(子程序過(guò)程)sub過(guò)程可以放在標(biāo)準(zhǔn)模塊和窗體模塊中。

5、vb中有兩種sub過(guò)程:u 事件過(guò)程u 通過(guò)過(guò)程1. 事件過(guò)程vb是事件驅(qū)動(dòng)的,為一個(gè)事件所編寫(xiě)的程序代碼,稱為事件過(guò)程。當(dāng)vb對(duì)象中的某個(gè)事件發(fā)生時(shí),自動(dòng)調(diào)用相應(yīng)的事件過(guò)程。事件過(guò)程分為窗體事件過(guò)程和控件事件過(guò)程。4.2.1 sub過(guò)程(子程序過(guò)程)(1) 窗體事件過(guò)程的語(yǔ)法:private sub form_事件名 (參數(shù)列表) 局部變量和常數(shù)聲明 語(yǔ)句塊end sub例如:private sub form_click () frmtext.show hide end sub注意:p 不管窗體的名稱(name)屬性是什么,在事件過(guò)程中只能使用“form_事件名”p 在程序代碼中對(duì)窗體的引用

6、須要使用窗體的名稱屬性p 在程序有多個(gè)窗體時(shí),如何對(duì)不同窗體的窗體事件編程?將要進(jìn)行編程的窗體放在屏幕最前端(或在工程資源管理器中選中窗體),再點(diǎn)擊工程資源管理器中的“查看代碼”按鈕;在代碼窗口的標(biāo)題欄中顯示代碼對(duì)應(yīng)的窗體。4.2.1 sub過(guò)程(子程序過(guò)程)(2) 控件事件過(guò)程的語(yǔ)法:private sub 控件名_事件名 (參數(shù)列表) 局部變量和常數(shù)聲明 語(yǔ)句塊end sub例如:例如:private sub command1_click () text2=text1*text1*3.14 end sub4.2.1 sub過(guò)程(子程序過(guò)程)(3) 事件過(guò)程的創(chuàng)建方法:u在設(shè)計(jì)的窗體上雙擊窗

7、體或控件,打開(kāi)“代碼編輯器”窗口,并會(huì)出現(xiàn)該窗體或控件的默認(rèn)過(guò)程代碼。u單擊工程資源管理器窗口的“查看代碼”按鈕,在對(duì)象列表框選擇對(duì)象,在“過(guò)程列表框”選擇事件過(guò)程。u根據(jù)語(yǔ)法要求,自己編寫(xiě)事件過(guò)程。4.2.1 sub過(guò)程(子程序過(guò)程)1. 通用過(guò)程當(dāng)幾個(gè)不同的事件過(guò)程需要執(zhí)行同樣的動(dòng)作時(shí),為了不重復(fù)編寫(xiě)代碼,可以采用通用過(guò)程來(lái)實(shí)現(xiàn)。u 要運(yùn)行通用過(guò)程中的代碼,需要在事件過(guò)程對(duì)通用過(guò)程進(jìn)行調(diào)用。u 通用過(guò)程可以保存在窗體模塊(.frm)和標(biāo)準(zhǔn)模塊(.bas)兩種模塊中。u 在vb中,事件過(guò)程是必要的,但通用過(guò)程不是必要的,是為了程序員方便而單獨(dú)建立的。4.2.1 sub過(guò)程(子程序過(guò)程)(1)

8、 通用過(guò)程的語(yǔ)法: private和public:用來(lái)聲明該sub過(guò)程是局部的(private),還是全局的(public),系統(tǒng)默認(rèn)值為public static:表示局部靜態(tài)變量?!办o態(tài)”是指在過(guò)程運(yùn)行結(jié)束后仍保留sub過(guò)程的變量值。 過(guò)程名:根據(jù)該通用過(guò)程的功能,程序員自己定義的名字。與變量的命名規(guī)則相同,在同一模塊中過(guò)程名不能重名。private|public static sub 過(guò)程名過(guò)程名(參數(shù)列表參數(shù)列表) 局部變量和常數(shù)聲明局部變量和常數(shù)聲明 語(yǔ)句塊語(yǔ)句塊exit sub語(yǔ)句塊語(yǔ)句塊end sub4.2.1 sub過(guò)程(子程序過(guò)程)(1) 通用過(guò)程的語(yǔ)法: 局部變量和常數(shù)聲明

9、:用來(lái)聲明過(guò)程中定義的變量和常數(shù),可用dim等語(yǔ)句聲明。 exit sub:使程序立即從一個(gè)sub過(guò)程中退出,一般放在分支結(jié)構(gòu)代碼中。 語(yǔ)句塊:過(guò)程中執(zhí)行的操作,稱為子程序或過(guò)程體。 end sub:用于結(jié)束本sub過(guò)程。注意:exit sub與end sub是結(jié)束本sub過(guò)程,不是結(jié)束應(yīng)用程序的運(yùn)行private|public static sub 過(guò)程名過(guò)程名(參數(shù)列表參數(shù)列表) 局部變量和常數(shù)聲明局部變量和常數(shù)聲明 語(yǔ)句塊語(yǔ)句塊exit sub語(yǔ)句塊語(yǔ)句塊end sub4.2.1 sub過(guò)程(子程序過(guò)程) 參數(shù)列表:類似于變量的聲明,列出從調(diào)用過(guò)程傳遞來(lái)的函數(shù)值,稱為形式參數(shù)(簡(jiǎn)稱形參)

10、,多個(gè)形參間用“,”隔開(kāi)。 形參語(yǔ)法:byval | byref 變量名 () as 數(shù)據(jù)類型byval:表示該參數(shù)按值傳遞byref:表示該參數(shù)按地址傳遞(默認(rèn)值)private|public static sub 過(guò)程名過(guò)程名(參數(shù)列表參數(shù)列表) 局部變量和常數(shù)聲明局部變量和常數(shù)聲明 語(yǔ)句塊語(yǔ)句塊exit sub語(yǔ)句塊語(yǔ)句塊end sub注意:即使sub過(guò)程中的參數(shù)列表為空,過(guò)程名后的括號(hào)也不能省略【例例ex_telephone】private sub form_load() dim i as integer for i = 1 to 9 load command1(i) command1

11、(i).visible = true command1(i).caption = i command1(i).left = command1(0).left + 800 * i if i 4 then command1(i).top = command1(0).top + 800 command1(i).left = command1(0).left + 800 * (i - 5) end if next iend subprivate sub command1_click(index as integer) text1.text = text1.text & command1(ind

12、ex).captionend sub4.2.1 sub過(guò)程(子程序過(guò)程)public sub warning ( byval f as integer) end sub private|public static sub 過(guò)程名過(guò)程名(參數(shù)列表參數(shù)列表) 局部變量和常數(shù)聲明局部變量和常數(shù)聲明 語(yǔ)句塊語(yǔ)句塊exit sub語(yǔ)句塊語(yǔ)句塊end subprivate sub warning (f as integer) end sub 例如:例如:注意:注意:sub過(guò)程不能嵌套定義過(guò)程不能嵌套定義public sub warning ( byval f as integer) private sub

13、 welcome () end sub end sub 4.2.1 sub過(guò)程(子程序過(guò)程)(2) 通用過(guò)程的創(chuàng)建方法:方法一:打開(kāi)“代碼編輯器”窗口后,點(diǎn)擊“工具”菜單的“添加過(guò)程”命令方法二:在“代碼編輯器”窗口中手動(dòng)創(chuàng)建4.2.2 function過(guò)程vb系統(tǒng)提供了諸多內(nèi)部函數(shù),如sin()、date()、left()等等。用戶可以利用function過(guò)程編寫(xiě)自己的函數(shù)過(guò)程。private|public static function 函數(shù)名函數(shù)名(參數(shù)列表參數(shù)列表) as 數(shù)據(jù)類型數(shù)據(jù)類型 局部變量和常數(shù)聲明局部變量和常數(shù)聲明 語(yǔ)句塊語(yǔ)句塊函數(shù)名表達(dá)式函數(shù)名表達(dá)式exit functi

14、on語(yǔ)句塊語(yǔ)句塊函數(shù)名表達(dá)式函數(shù)名表達(dá)式end function注意:與sub過(guò)程一樣,function過(guò)程也是一個(gè)獨(dú)立的過(guò)程;與sub過(guò)程不同的是,function過(guò)程可以返回一個(gè)值到調(diào)用的過(guò)程private|public static sub 過(guò)程名過(guò)程名(參數(shù)列表參數(shù)列表) 局部變量和常數(shù)聲明局部變量和常數(shù)聲明 語(yǔ)句塊語(yǔ)句塊exit sub語(yǔ)句塊語(yǔ)句塊end sub4.2.2 function過(guò)程private|public static function 函數(shù)名函數(shù)名(參數(shù)列表參數(shù)列表) as 數(shù)據(jù)類型數(shù)據(jù)類型 局部變量和常數(shù)聲明局部變量和常數(shù)聲明 語(yǔ)句塊語(yǔ)句塊函數(shù)名表達(dá)式函數(shù)名表達(dá)式

15、exit function語(yǔ)句塊語(yǔ)句塊函數(shù)名表達(dá)式函數(shù)名表達(dá)式end function as 數(shù)據(jù)類型:函數(shù)返回值的數(shù)據(jù)類型,例如sin()函數(shù)的返回值為double型。若省略“as子句”,默認(rèn)類型為variant型。 語(yǔ)句塊:描述過(guò)程的操作,稱為子函數(shù)體或函數(shù)體。 函數(shù)名表達(dá)式:在函數(shù)體中用該語(yǔ)句給函數(shù)賦值。如果在function過(guò)程中省略該語(yǔ)句,則返回值為數(shù)據(jù)類型的默認(rèn)值。例如,數(shù)值函數(shù)返回0;字符函數(shù)返回空字符串。4.2.2 function過(guò)程private|public static function 函數(shù)名函數(shù)名(參數(shù)列表參數(shù)列表) as 數(shù)據(jù)類型數(shù)據(jù)類型 局部變量和常數(shù)聲明局部變

16、量和常數(shù)聲明 語(yǔ)句塊語(yǔ)句塊函數(shù)名表達(dá)式函數(shù)名表達(dá)式exit function語(yǔ)句塊語(yǔ)句塊函數(shù)名表達(dá)式函數(shù)名表達(dá)式end function exit function語(yǔ)句:提前退出function過(guò)程。在退出函數(shù)過(guò)程之前,必須保證為函數(shù)賦值,否則出錯(cuò)。4.2.2 function過(guò)程function過(guò)程實(shí)例:計(jì)算直角三角形的斜邊長(zhǎng)度過(guò)程實(shí)例:計(jì)算直角三角形的斜邊長(zhǎng)度 function hypotenuse (a as integer, b as integer) as integerhypotenuse=sqr(a2+b2)end function實(shí)例中:l a、b為兩個(gè)整型的形式參數(shù)l hyp

17、otenuse函數(shù)的返回值為一個(gè)整型數(shù)l 函數(shù)體為賦值語(yǔ)句,計(jì)算兩個(gè)形參平方和的平方根4.3過(guò)程的調(diào)用private sub command1_click() dim y as double, f as double f = sin(10) y = sin(val(text1.text) text2.text = yend sub語(yǔ)句1語(yǔ)句2過(guò)程1調(diào)用語(yǔ)句語(yǔ)句3語(yǔ)句4語(yǔ)句1語(yǔ)句2過(guò)程2調(diào)用語(yǔ)句語(yǔ)句3end 過(guò)程1語(yǔ)句1語(yǔ)句2語(yǔ)句3end 過(guò)程2事件過(guò)程事件過(guò)程過(guò)程過(guò)程1代碼代碼過(guò)程過(guò)程2代碼代碼過(guò)程調(diào)用的程序執(zhí)行順序:過(guò)程調(diào)用的程序執(zhí)行順序:4.3.1 調(diào)用sub事件過(guò)程調(diào)用sub過(guò)程是一個(gè)獨(dú)

18、立的語(yǔ)句。sub事件過(guò)程可由事件自動(dòng)調(diào)用,或在同一模塊中的其它過(guò)程中使用調(diào)用語(yǔ)句調(diào)用。調(diào)用sub過(guò)程的方法:1.使用call語(yǔ)句語(yǔ)法:call 過(guò)程名 (參數(shù)列表)2.直接使用過(guò)程名語(yǔ)法:過(guò)程名 參數(shù)列表l 參數(shù)列表:在調(diào)用語(yǔ)句中的參數(shù)稱為實(shí)在參數(shù)(簡(jiǎn)稱實(shí)參)。實(shí)參可以是變量、常數(shù)、數(shù)據(jù)和表達(dá)式。l 使用call語(yǔ)句調(diào)用時(shí),參數(shù)必須在括號(hào)內(nèi);沒(méi)有參數(shù)時(shí),括號(hào)可省略。用過(guò)程名調(diào)用,沒(méi)有參數(shù)時(shí)必須省略參數(shù)兩邊的括號(hào)l 執(zhí)行調(diào)用語(yǔ)句時(shí),vb將控制傳遞給被調(diào)用的sub過(guò)程。4.3.1 調(diào)用sub事件過(guò)程private sub txtinput_lostfocus() if isnumeric(txti

19、nput) = true then msgbox 輸入的是數(shù)值輸入的是數(shù)值, vbokonly, 輸入輸入 else msgbox 輸入的是文字輸入的是文字, vbokonly, 輸入輸入 end ifend subprivate sub cmdcheck_click() call txtinput_lostfocusend subprivate sub cmdend_click() endend sub【例ex_checkn1】4.3.2 調(diào)用sub通用過(guò)程sub warning() if isnumeric(txtinput) = true then msgbox 輸入的是數(shù)值, vbok

20、only, 輸入 else msgbox 輸入的是文字, vbokonly, 輸入 end ifend subprivate sub cmdcheck_click() call warningend subprivate sub txtinput_lostfocus() warningend sub【例ex_checkn2】注意:vb程序是事件驅(qū)動(dòng)的,sub通用過(guò)程只有在被其它事件過(guò)程直接或間接調(diào)用時(shí)才會(huì)被執(zhí)行,否則不會(huì)被執(zhí)行。4.3.3調(diào)用function過(guò)程調(diào)用函數(shù)function過(guò)程的方法與調(diào)用vb內(nèi)部函數(shù)方法一樣,在語(yǔ)句中直接使用函數(shù)名,function過(guò)程可以返回一個(gè)值到調(diào)用的過(guò)程。

21、例如:function hypotenuse (a as integer, b as integer) as integer hypotenuse=sqr(a2+b2) end function private sub form_click() print 10*hypotenuse(3,4) x=hypotenuse(3,4) if hypotenuse(3,4)=10 then print “error”end sub4.3.3調(diào)用function過(guò)程采用調(diào)用sub過(guò)程的語(yǔ)法也能調(diào)用function過(guò)程,當(dāng)用這種方法調(diào)用過(guò)程時(shí),放棄function過(guò)程的返回值。調(diào)用sub過(guò)程的方法:1.使

22、用call語(yǔ)句語(yǔ)法:call 過(guò)程名 (參數(shù)列表)2.直接使用過(guò)程名語(yǔ)法:過(guò)程名 參數(shù)列表例如: p=msgbox (“輸入的是數(shù)值”, vbokonly, “輸入)msgbox “輸入的是數(shù)值”, vbokonly, “輸入” function hypotenuse (a as integer, b as integer) as integer hypotenuse=sqr(a2+b2) end function private sub form_click() print 10*hypotenuse(3,4) x=hypotenuse(3,4) if hypotenuse(3,4)=10

23、then print “error”end sub4.4 參數(shù)的傳遞在調(diào)用一個(gè)有參數(shù)的過(guò)程時(shí),參數(shù)是在本過(guò)程有效的局部變量,通過(guò)“形參和實(shí)參結(jié)合”傳遞信息。u 實(shí)現(xiàn)調(diào)用過(guò)程的實(shí)參與被調(diào)用過(guò)程的形參之間的數(shù)據(jù)傳遞。u 數(shù)據(jù)有按值傳遞和按地址傳遞兩種方式。1.形參:在被調(diào)用過(guò)程中的參數(shù)是形參。2.實(shí)參:是在主調(diào)過(guò)程中的參數(shù)。4.4.1 形參和實(shí)參語(yǔ)句1語(yǔ)句2過(guò)程1調(diào)用語(yǔ)句語(yǔ)句3語(yǔ)句4語(yǔ)句1語(yǔ)句2語(yǔ)句3end 過(guò)程14.4.1 形參和實(shí)參l在過(guò)程定義語(yǔ)句中的參數(shù)列表為形參列表,在過(guò)程被調(diào)用之前,形參未被分配內(nèi)存,只是說(shuō)明形參的類型和在過(guò)程中的作用l在過(guò)程調(diào)用語(yǔ)句中的參數(shù)列表為實(shí)參列表,在過(guò)程調(diào)用時(shí)實(shí)

24、參將數(shù)據(jù)傳遞給形參例如:function hypotenuse (a as integer, b as integer) as integer hypotenuse=sqr(a2+b2) end function private sub form_click() dim x as integer,y as integer,c as integer x=val(text1) : y=val(text2) c=hypotenuse(x,y)end sub4.4.1 形參和實(shí)參l形參列表和實(shí)參列表的對(duì)應(yīng)變量名可以不同。l實(shí)參與形參的個(gè)數(shù)、順序和數(shù)據(jù)類型必須相同。l形參與實(shí)參的數(shù)據(jù)傳遞是按位置結(jié)合的,

25、即第1個(gè)實(shí)參與第1個(gè)形參結(jié)合,第2個(gè)實(shí)參與第2個(gè)形參結(jié)合,依此類推。l形參與實(shí)參必須是一一對(duì)應(yīng)的關(guān)系,否則編譯出錯(cuò)。例如:function hypotenuse (a as integer, b as integer) as integer hypotenuse=sqr(a2+b2) end function private sub form_click() dim x as integer,y as integer,c as integer x=val(text1) : y=val(text2) c=hypotenuse(x,y) end subc=hypotenuse(x) : d=hyp

26、otenuse(x,y,10)4.4.1 形參和實(shí)參例如:function hypotenuse (a as integer, b) as integer hypotenuse=sqr(a2+b2) end function private sub form_click() dim x as single, y as single, c as integer x=10.5 : y=5.8 c=hypotenuse(10.5 , 5.8) c=hypotenuse(x , y)end subl如果沒(méi)有聲明形參的數(shù)據(jù)類型,則默認(rèn)為variant型數(shù)據(jù)。l對(duì)于實(shí)參數(shù)據(jù)類型那個(gè)與形參不一致時(shí),vb會(huì)先

27、將實(shí)參進(jìn)行數(shù)據(jù)轉(zhuǎn)換,然后將轉(zhuǎn)換值傳遞給形參。注意:這種數(shù)據(jù)轉(zhuǎn)換只適用于常量的轉(zhuǎn)換。4.4.1 形參和實(shí)參l形參可以使用可選參數(shù),在參數(shù)列表中使用optional關(guān)鍵字。當(dāng)使用可選參數(shù)后,形參與實(shí)參不必一一對(duì)應(yīng),在實(shí)參列表中缺省的參數(shù)取值為該數(shù)據(jù)類型的默認(rèn)值。l形參與實(shí)參是相對(duì)的概念。例如:function hypotenuse (optional a as integer, optional b as integer) as integer y=sin(a) hypotenuse=sqr(a2+b2) end function private sub form_click() dim x as

28、 integer,y as integer,c as integer x=val(text1) : y=val(text2) c=hypotenuse(x,y)end subc=hypotenuse(x) : c=hypotenuse(,x)4.4.2 參數(shù)按值傳遞和按地址傳遞在vb程序進(jìn)行過(guò)程調(diào)用時(shí),參數(shù)的傳遞有按值傳遞(passed by value)和按地址傳遞(passed by reference)兩種方式。1 按值傳遞參數(shù)l參數(shù)按值傳遞使用byval關(guān)鍵字。例如: public sub warning ( byval f as integer) end sub 4.4.2 參數(shù)按值

29、傳遞和按地址傳遞1 按值傳遞參數(shù)l按值傳遞參數(shù)時(shí),vb給傳遞的形參分配一個(gè)臨時(shí)的內(nèi)存單元,將實(shí)參的值傳遞到這個(gè)臨時(shí)單元。l實(shí)參向形參傳遞是單向的。如果在被調(diào)用過(guò)程中改變了形參值,不會(huì)影響實(shí)參變量本身。l當(dāng)被調(diào)用過(guò)程結(jié)束返回主調(diào)過(guò)程時(shí),vb將釋放形參的臨時(shí)存儲(chǔ)單元。4.4.2 參數(shù)按值傳遞和按地址傳遞private sub cmdstart_click() dim a, b, c as integer a = val(txta.text) b = val(txtb.text) txtmax = max(a, b) txtresulta.text = a txtresultb.text = ben

30、d subprivate function max(byval x as integer, byval y as integer) dim z as integer if x y then z = x : x = y : y = z end if max = x txtx.text = x : txty.text = yend function【例例ex_max】4.4.2 參數(shù)按值傳遞和按地址傳遞2 按地址傳遞參數(shù)l定義按地址傳遞參數(shù)可使用byref關(guān)鍵字,或不使用關(guān)鍵字。例如: public sub warning ( byref f as integer) end sub public

31、sub warning (f as integer) end sub 4.4.2 參數(shù)按值傳遞和按地址傳遞2 按地址傳遞參數(shù)l按地址傳遞參數(shù),是指把形參變量的內(nèi)存地址傳遞給被調(diào)用的過(guò)程。形參、實(shí)參具有相同的地址,即形參、實(shí)參共享同一段存儲(chǔ)單元。l在被調(diào)用過(guò)程中改變形參的值,則相應(yīng)實(shí)參的值也被改變。l如果在過(guò)程調(diào)用語(yǔ)句中的實(shí)參是參數(shù)或表達(dá)式,則vb用按值傳遞的方法處理。4.4.2 參數(shù)按值傳遞和按地址傳遞private function max(x as integer, y as integer) dim z as integer if x 0 multiply = multiply * n

32、n = n - 1 loopend functionprivate sub form_click() dim sum as integer, i as integer for i = 3 to 1 step -1 sum = sum + multiply(i) next i print sum=; sumend sub4.4.3 數(shù)組參數(shù)數(shù)組參數(shù)是指在定義過(guò)程時(shí),可以定義數(shù)組作為過(guò)程的形參。l語(yǔ)法: 形參數(shù)組名形參數(shù)組名() as 數(shù)據(jù)類型數(shù)據(jù)類型l形參為數(shù)組時(shí),過(guò)程調(diào)用時(shí)的實(shí)參必須也是數(shù)組。l實(shí)參列表中的數(shù)組不需要用“()”。l數(shù)組的參數(shù)傳遞只能按地址傳遞,形參與實(shí)參共用同一段內(nèi)存單元。4.

33、4.3 數(shù)組參數(shù)【例例ex_averscore】計(jì)算正式員工和臨時(shí)員工的平均工資計(jì)算正式員工和臨時(shí)員工的平均工資private sub cmdstart_click() dim salary1(5) as single, salary2(8) as single salary1(0) = 1900: salary1(1) = 1970: salary1(2) = 1915 salary1(3) = 1600: salary1(4) = 1655 salary2(0) = 2675: salary2(1) = 2780: salary2(2) = 2715 salary2(3) = 2540:

34、salary2(4) = 2990 salary2(5) = 2770: salary2(6) = 2895: salary2(7) = 2765 txts1.text = int(average(salary1, 5) * 100) / 100 txts2.text = int(average(salary2, 8) * 100) / 100end subprivate function average(stuarray() as single, n as integer) as single dim i as integer dim aver as single, sum as singl

35、e for i = 0 to n - 1 sum = sum + stuarray(i) next i aver = sum / n average = averend function賦初始值賦初始值salary1為臨時(shí)員工為臨時(shí)員工salary2為正式員工為正式員工調(diào)用調(diào)用average函數(shù)函數(shù)計(jì)算平均工資,并計(jì)算平均工資,并在文本框中顯示在文本框中顯示計(jì)算工計(jì)算工資總和資總和4.4.4對(duì)象參數(shù)vb中對(duì)象也可以作為形參,將對(duì)象向被調(diào)用過(guò)程傳遞。l對(duì)象的傳遞只能按地址傳遞。l對(duì)象的類型聲明為“control”或控件類型,如:“l(fā)able”、“form”。4.4.4對(duì)象參數(shù)private su

36、b cmdemployee_click(index as integer) call frmselect(frmsecond, cmdemployee(index).caption) call labselect(frmsecond.label1, cmdemployee(index).caption)end subprivate sub frmselect(f as form, cmdcap as string) f.caption = cmdcap & 人員管理end subprivate sub labselect(l as label, cmdcap as string) l.

37、caption = 歡迎進(jìn)入 & chr(13) & cmdcap & 人員管理 l.fontsize = 16 l.fontbold = true l.visible = true frmsecond.show frmfirst.hideend sub【例例ex_formargu1】創(chuàng)建兩個(gè)窗體的人員管理系統(tǒng)創(chuàng)建兩個(gè)窗體的人員管理系統(tǒng)4.5 遞歸過(guò)程在vb中sub過(guò)程可以進(jìn)行遞歸調(diào)用,即在過(guò)程中可以直接或間接地調(diào)用過(guò)程本身。private function fnc(x as integer) dim y as integer , z as single zfnc(y)

38、 end function這種遞歸結(jié)構(gòu)會(huì)使過(guò)程進(jìn)入無(wú)限死循環(huán)?這種遞歸結(jié)構(gòu)會(huì)使過(guò)程進(jìn)入無(wú)限死循環(huán)?遞歸程序的編程方法:遞歸程序的編程方法:確定遞歸公式確定遞歸公式遞歸的結(jié)束條件遞歸的結(jié)束條件 采用條件結(jié)構(gòu)編寫(xiě)程序采用條件結(jié)構(gòu)編寫(xiě)程序4.5 遞歸過(guò)程【例例ex_muln1】計(jì)算計(jì)算n的階乘的階乘1 遞歸的形式 n!=n(n-1)(n-2)21 可以寫(xiě)成: n!=n(n-1)! (n-1)! =(n-1)(n-2)! 遞歸公式為:n!=n(n-1)!2 遞歸的結(jié)束條件 n0或1時(shí) n!=14.5 遞歸過(guò)程【例例ex_muln1】計(jì)算計(jì)算n的階乘的階乘private sub form_click()

39、 dim m as integer, i as integer i = inputbox(請(qǐng)輸入一個(gè)正整數(shù)) m = muln(i) print m=; mend subprivate function muln(n as integer) as integer if n = 0 or n = 1 then muln = 1 else muln = muln(n - 1) * n end ifend functionprivate function muln(n as integer) as integer select case n case 0 or 1 muln = 1 case is

40、1 muln = muln(n - 1) * n end selectend function4.6 變量和過(guò)程的作用范圍4.6.1 變量的作用范圍變量的作用范圍是指變量有效的范圍。在vb中可分為過(guò)程級(jí)變量、模塊級(jí)變量和全局變量三種。1 過(guò)程級(jí)變量:過(guò)程級(jí)變量只在聲明它們的過(guò)程中才有效,也稱為局部變量。用戶無(wú)法在其他過(guò)程中訪問(wèn)或改變變量的值。過(guò)程級(jí)變量的定義方法: dim 變量名 as 數(shù)據(jù)類型 static 變量名 as 數(shù)據(jù)類型4.6.1 變量的作用范圍private function max(x as integer, y as integer) dim z as integer if

41、x y then z = x : x = y : y = z end if max = x txtx.text = x : txty.text = yend functionl對(duì)于臨時(shí)的計(jì)算,適合聲明為局部變量。l不同過(guò)程中的局部變量可以重名。l在過(guò)程中使用dim語(yǔ)句定義的變量都是局部變量。4.6.1 變量的作用范圍2 模塊級(jí)變量:模塊級(jí)變量對(duì)該模塊的所有過(guò)程都有效。在模塊中的任何過(guò)程都可以使用該變量。模塊級(jí)變量的定義方法: dim 變量名 as 數(shù)據(jù)類型 private 變量名 as 數(shù)據(jù)類型4.6.1 變量的作用范圍3 全局變量:全局變量的作用范圍是應(yīng)用程序的所有過(guò)程,也稱為共用變量。全局

42、變量的定義方法: public 變量名 as 數(shù)據(jù)類型4.6.1 變量的作用范圍【例例ex_formargu2】人員管理系統(tǒng)人員管理系統(tǒng)【例例ex_formargu2】人員管理系統(tǒng)人員管理系統(tǒng)首先創(chuàng)建2個(gè)窗體文件和一個(gè)標(biāo)準(zhǔn)模塊文件。給全局變給全局變量賦值量賦值窗體窗體2內(nèi)內(nèi)標(biāo)簽控件標(biāo)簽控件顯示的內(nèi)顯示的內(nèi)容容窗體窗體2標(biāo)標(biāo)題欄顯示題欄顯示的內(nèi)容的內(nèi)容計(jì)算平均計(jì)算平均值的函數(shù)值的函數(shù)過(guò)程過(guò)程4.6.2 靜態(tài)變量變量除了作用范圍外,還有存活期的概念,即變量能夠保持其值的時(shí)間。l 模塊級(jí)變量和全局變量的存活期是整個(gè)應(yīng)用程序的運(yùn)行期間。l 在過(guò)程中用dim語(yǔ)句定義的局部變量?jī)H當(dāng)本過(guò)程執(zhí)行期間存在。當(dāng)過(guò)

43、程執(zhí)行完畢,變量的存儲(chǔ)空間被釋放,在下一次執(zhí)行該過(guò)程時(shí)所有局部變量將重新初始化。l 可以使用static語(yǔ)句將局部變量定義為靜態(tài)局部變量,這樣過(guò)程結(jié)束后保留變量的值,即不釋放變量占用的內(nèi)存單元。static ss as integerdim tt as double4.6.2 靜態(tài)變量【例例ex_plus】private static function fac(n as integer) dim f as integer f = f + n fac = fend functionprivate sub form_click() dim i as integer for i = 1 to 5 p

44、rint ; i & = & fac(i) next iend subl 在過(guò)程定義語(yǔ)句中使用static關(guān)鍵字,則過(guò)程中定義的所有變量為靜態(tài)局部變量。l 在點(diǎn)擊窗體的事件過(guò)程中,通過(guò)for 循環(huán)結(jié)構(gòu)共調(diào)用了5次fac函數(shù)過(guò)程。因?yàn)椴捎昧遂o態(tài)變量,每次調(diào)用結(jié)束后,f的值被保留。若定義的不是靜態(tài)變量運(yùn)行結(jié)果不同。l 將f設(shè)為模塊級(jí)變量,運(yùn)行結(jié)果相同。但模塊內(nèi)所有過(guò)程都能對(duì)f值進(jìn)行修改,故容易出錯(cuò)。4.6.3 過(guò)程的作用范圍1 過(guò)程的有效范圍:sub過(guò)程和function過(guò)程的作用范圍有全局過(guò)程和局部過(guò)程2種。通過(guò)public和private關(guān)鍵字定義。private sub 過(guò)程名(參數(shù)列表) 僅在本模塊才能訪問(wèn)public sub 過(guò)程名(參數(shù)列表) 程序的所有模塊都能訪問(wèn)4.6.3 過(guò)程的作用范圍2 過(guò)程的外部調(diào)用:外部調(diào)用是指調(diào)用其他模塊中的全局過(guò)程。(1) 調(diào)用窗體模塊中的過(guò)程:必須以窗體名作為調(diào)用的前綴語(yǔ)法: call 窗體名.全局過(guò)程名 (實(shí)參列表)例如:在窗體form2中定義一個(gè)全局過(guò)程sub1,在窗體1中調(diào)用該過(guò)程。private sub form_click() call form2.sub1end sub4.6.3 過(guò)程的作用范圍(2) 調(diào)用標(biāo)

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論