官术网_书友最值得收藏!

  • Visual Basic實例精通
  • 柴相花等編著
  • 1369字
  • 2019-03-01 14:47:18

第4章 過程

在前面的章節中分別介紹了VB語言基礎中的基本概念、數組、語句,這些是VB編程的基礎。除了以上知識外,VB的語言基礎還包括過程,一個大的系統往往有很多個過程組成,每個過程都是系統的一個小的邏輯部件。過程可以分為子過程和過程函數,其中子過程表示響應事件時執行的代碼塊,包括通用過程和事件過程兩種。通用過程表示供很多個事件過程調用的過程,是為了避免代碼的重復書寫;事件過程表示某個對象的事件得到觸發時,執行的代碼段。過程函數也表示一個獨立的過程,不過,可以返回一個值到調用的過程,并且兩者的語法不同,這些內容都是本章要詳細介紹的內容。

4.1 可變參數的例子

過程調用的過程中通常伴隨有參數的傳遞,傳遞參數的類別多種多樣。本節介紹一種可變參數,即傳遞的參數的數量沒有提前確定,只有當傳遞時才確定數量大小。本節要介紹的實例是計算輸入數據的和。

技術要點

在本實例中主要使用的技術是事件過程、通用過程和不定數量的參數,主要功能和用法如下:

●事件過程,主要用于當VB中某個對象的事件被觸發時,執行相應操作的代碼段,事件過程分為窗體事件過程和控件事件過程。

●通用過程,主要用于供一個或多個事件過程調用的子過程,完成事件過程中的某個功能。

●不定數量的參數,表示被調用過程接受實參的個數是不確定的,即可以接受任意個數的參數。以關鍵字ParaArray作為標識。

窗體事件過程的具體語法如下:

        Private Sub Form或MDIForm_事件名([參數表])
        [局部變量或常量聲明]
        [語句塊]
        End Sub

控件事件過程的具體語法為:

        Private Sub控件名_事件名([參數表])
        [局部變量或常量的聲明]
        [語句塊]
        End Sub

通用過程沒有通用的語法標準,具體描述如下:

        Private Sub用戶自定義過程名([形參數表])
        [局部變量或常量的聲明]
        [語句塊]
        End Sub

實現代碼

        Dim x                                                        '定義可變類型變量
        Dim y,VSum As Long                                           '定義長整型變量
        '求和子過程
        Private Sub sumx(ParamArray ArrC())
            Dim i As Integer                                          '定義整型變量
            For i = 0 To UBound(ArrC)
              TxtData.Text = TxtData.Text & ArrC(i)&""           '來讀每個參數
            Next
            For Each x In ArrC()                                   '遍歷數組中的每個元素
                y = y + x                                            '求和
            Next x
            VSum = y                                                 '把最終結果賦值給VSum
        End Sub
        '計算和
        Private Sub CmdCalculate_Click()
            sumx 1,2,6,9,8,15,6,2                              '賦參數
            TxtSum.Text = VSum                                       '顯示最終的和
        End Sub
        '退出系統
        Private Sub CmdExit_Click()
            Unload Me                                                '卸載窗體
        End Sub

單擊工具欄中的保存按鈕,保存工程,然后單擊工具欄中的啟動按鈕,運行工程,程序運行結果如圖4.1 所示。輸入數據,并單擊“計算和”按鈕時,程序運行結果如圖4.2所示。

圖4.1 程序運行初始狀態界面圖

圖4.2 計算和之后的界面圖

然后單擊工具欄中的結束按鈕,或者單擊運行窗口的關閉按鈕,結束程序的運行。

源程序解讀

(1)代碼首先定義了一個可變型變量x,兩個長整型變量y和VSum。

(2)當單擊“CmdCalculate”命令按鈕時,就觸發CmdCalculate_ Click()事件,這就用到事件過程Private Sub CmdCalculate_ Click(),在該過程中,執行計算輸入數據和的操作,首先調用自定義的子過程sumx,并傳遞可變型參數。

(3)在自定義的子過程Private Sub sumx(ParamArray ArrC())中,可以看到形式參數是一個可變型數組,用來接收傳遞的可變型變量。在該過程中,首先定義循環變量i。然后運用For循環語句,由文本框控件TxtData顯示輸入的數據。最后運用For Each循環語句,遍歷數組中的元素,并計算數據的和,最后把計算出來的和賦值給變量VSum。

(4)接著轉到調用過程,把計算出來的和由“TxtSum”文本框顯示出來。

(5)當單擊“CmdExit”命令按鈕時,就觸發CmdExit_ Click()。這就用到另一個事件過程Private Sub CmdExit_ Click()。在該過程中,運用Unload語句卸載當前窗體。

4.2 數組作為過程參數

在上一節中介紹了可變參數的運用,其中要重點注意參數的傳遞方法和參數的定義方式。在前面已經介紹過數組的相關概念,本節主要介紹數組作為過程參數的用法。

技術要點

本實例中主要用到的技術是過程參數的傳遞方式。過程參數的傳遞方式有按值傳遞和按地址傳遞。

●按值傳遞參數,傳遞的只是變量的副本,當在過程中改變了變量的值,改變的只是副本,不會影響變量本身。按值傳遞參數的標志是關鍵字ByVal。

●按地址傳遞參數,傳遞的是存儲變量的內存地址,當在過程中改變了變量的值,就會永久性的改變變量本身,一般在VB中默認的是按照地址傳遞參數,本實例中就是按照地址傳遞的方式傳遞數組變量,當在過程中給數組排序時,數組也隨之改變,所以再次顯示數組時,便是排序后的結果,不過運用按地址傳遞參數時要注意對變量值的改變。

實現代碼

        Dim ArrValue(4,4)                                        '定義數組變量
        Private Sub cmdArray_Click()
            Call Sort(ArrValue())                               '調用過程 Sort
            For i = 1 To 4
                '顯示排序后的矩陣值
                Text1(i + 3).Text = ArrValue(1,i)              '顯示數組第一行
                Text2(i + 3).Text = ArrValue(2,i)              '顯示數組第二行
                Text3(i + 3).Text = ArrValue(3,i)              '顯示數組第三行
                Text4(i + 3).Text = ArrValue(4,i)              '顯示數組第四行
            Next
        End Sub
        '用數組作過程參數
        Sub Sort(ByRef arrTemp())
            Dim i,j As Integer                                       '定義兩個整型變量
            For i = 1 To 4                                           '外循環
                For j = 1 To 4                                       '內循環
                    arrTemp(i,j)= i + j                          '給數組排序
                Next
            Next
        End Sub
        Private Sub Form_Load()
            Dim i,j As Integer                                        '定義兩個整型變量
            For i = 1 To 4                                            '外循環
                For j = 1 To 4                                        '內循環
                    ArrValue(i,j)= 10 * i+j                       '給數組賦初值
                Next
                '顯示要排序的矩陣值
                Text1(i - 1).Text = ArrValue(1,i)               '顯示數組第一行
                Text2(i - 1).Text = ArrValue(2,i)               '顯示數組第二行
                Text3(i - 1).Text = ArrValue(3,i)               '顯示數組第三行
                Text4(i - 1).Text = ArrValue(4,i)               '顯示數組第四行
            Next
        End Sub

按Ctrl+S組合鍵,保存工程,然后按F5鍵運行工程。單擊啟動按鈕時,程序運行結果如圖4.3所示。單擊“調用排序過程”按鈕時,程序運行結果如圖4.4所示。

圖4.3 調用排序過程前的界面圖

圖4.4 調用排序過程后的界面圖

源程序解讀

(1)首先定義局部全局數組變量ArrValue,主要用于排序。

(2)在Form_ Load()事件中,首先定義兩個整型變量i和j作為循環變量。然后運用For循環的嵌套語句給數組賦值,并用文本框控件顯示數組。

(3)當單擊“cmdArray”命令按鈕時,就觸發cmdArray_ Click()事件。在該事件中,用Call語句調用排序過程Sort并以數組ArrValue()作為實在參數。

(4)在Sort過程中,以ByRef arrTemp()作為形參,接受傳遞的參數。首先定義兩個整型i和j作為循環變量。然后運用For循環的嵌套語句排序數組,并轉換到調用的cmdArray_Click()事件中,最后由文本框數組顯示排序后的結果。

4.3 可選參數的實例

在上一節中分別介紹了可變參數和數組作為過程參數,了解了傳遞參數的類別和參數傳遞的方式,本節要介紹另外一種過程參數類別——可選參數的實例,即選擇參數計算其和。

技術要點

本實例運用的主要技術是可選參數、IsMissing函數和函數過程,主要功能和用法如下:

●可選參數,表示形式參數中的參數是可選的,即可以選擇這個參數參與語句塊的執行,也可以不選擇這個參數參與語句塊的執行。可選參數以關鍵字Optional作為標識,當某個參數前有這個標識時,說明這個參數是可選參數。可選參數是否參與語句塊的執行根據IsMissing函數進行判斷。

● IsMissing函數,主要用于判斷丟失的可選參數。

●函數過程,是一個獨立的過程,可以返回一個值到調用過程。

IsMissing函數的具體語法如下:

        Function IsMissing(ArgName)As Boolean

其中,參數ArgName表示可選參數名稱,如果未傳送可選參數,返回True;否則返回False。

函數過程的具體語法如下:

        [Private|Public][Static]Function 函數過程名([參數表])[As類型]
        [語句塊]
        End Function

其中,參數“類型”表示函數過程與變量一樣有數據類型,該數據類型從而決定返回值的類型,如果省略該參數,默認數據類型為Variant。

說明:End語句與子過程不同,子過程是End Sub,而函數過程是End Function。

實現代碼

        Dim x,y As Integer                                         '定義兩個整型變量
        Private Sub CmbSelect_Click()
            Select Case CmbSelect.ListIndex                         '根據組合框中的選項決定參數的選擇
                Case 0                                              '兩個參數的情況
                  x = ComAdd(3,4)                               '調用函數過程
                  TxtShow.Text = x                                 '顯示調用后的結果
                  Labshow.Caption = "選擇兩個參數為:3,4"       '顯示選擇的情況
                Case 1                                              '三個參數的情況
                  y = ComAdd(3,4,5)                            '調用函數過程
                  TxtShow.Text = y                                 '顯示調用后的結果
                  Labshow.Caption = "選擇三個參數為:3,4,5"    '顯示選擇的情況
            End Select
        End Sub
        '初始化,給組合框中添加參數選擇類別
        Private Sub Form_Load()
            CmbSelect.AddItem "兩個參數"                     '在組合框中添加"兩個參數"
            CmbSelect.AddItem "三個參數"                     '在組合框中添加"三個參數"
        End Sub
        '自定義的函數過程,做參數的累加操作
        Function ComAdd(a As Integer,b As Integer,Optional c As Integer)
            If IsMissing(c)Then                              '判斷是否傳遞參數c
                ComAdd = a + b                                 '兩個參數的情況
            Else
                ComAdd = a + b + c                             '三個參數的情況
            End If
        End Function

按Ctrl+S組合鍵,保存工程,然后按F5鍵運行工程。當選擇組合框中“兩個參數”選項時,程序運行結果如圖4.5所示。當選擇組合框中“三個參數”選項時,程序運行結果如圖4.6所示。

圖4.5 選擇兩個參數的界面圖

圖4.6 選擇三個參數的界面圖

源程序解讀

(1)代碼首先定義兩個整型變量x和y作為接受過程傳遞結果的變量。

(2)在Form_ Load()事件中,初始化“CmbSelect”組合框。添加兩項參數的選擇類別:兩個參數和三個參數。單擊“CmbSelect”組合框,觸發CmbSelect_ Click()事件。這就調用了事件過程Private Sub CmbSelect_ Click()。

(3)在CmbSelect_ Click()事件中,運用Select Case語句,根據“CmbSelect”組合框的ListIndex屬性的取值,決定選擇參數的個數。當CmbSelect.ListIndex=0時,調用函數過程ComAdd(3,4),表示選擇兩個參數;當CmbSelect.ListIndex=1時,調用函數過程ComAdd(3, 4,5),表示選擇三個參數。

(4)在函數過程Function ComAdd(a As Integer,b As Integer,Optional c As Integer)中,有三個形式參數,兩個必選參數a和b,一個可選參數c。運用If語句,根據IsMissing函數的判定結果,選擇參加累加的參數個數。如果IsMissing(c)=True,說明c參數丟失,則選擇兩個參數參加累加操作;否則,選擇三個參數參加累加操作。

(5)累加操作完成后,返回調用過程CmbSelect_ Click(),分別使用“TxtShow”文本框和“Labshow”標簽顯示累加的結果和選擇參數的情況。

說明:對于可選參數,也可以給其指定默認值,如本例中可以給參數c指定默認值,方式為:Optional c As Integer=9,如果可選參數丟失,則按照默認值參與運算,否則按照傳遞的值參與運算。

4.4 運用過程的改變控件背景色和計算參數乘積

在前節中介紹了過程參數傳遞的類型和過程的類別,希望讀者通過上面的介紹,可以對過程的運用有更深入的了解,并注意參數傳遞時值的改變,在上面的基礎上,本節綜合介紹一下運用過程改變形狀控件背景色和計算選擇參數乘積的綜合應用實例。

技術要點

本實例中主要運用的技術是通用過程和函數過程的調用以及可選參數設置默認值,主要功能和用法如下:

通用過程的調用,表示由一個事件過程調用的過程。調用通用過程有兩種方法,具體語法為:

        [Call][Sub]過程名([實參表])
        [Sub]過程名([實參表])

函數過程的調用有三種方法,具體語法為:

        VarName=函數過程名([實參表])
        Call 函數過程名([實參表])
        函數過程名 [實參表]

注意:關鍵字Call與后面的“()”配對出現,即當調用過程時前面有關鍵字Call,后面的實參表必須在括號內;當調用過程時前面沒有關鍵字Call,則后面的實參表兩側便不能有括號。

實現代碼

        Dim x,y As Integer                                         '定義兩個整型變量
        Private Sub CmbSel_Click()
            Select Case CmbSel.ListIndex                            '根據組合框中的選項決定參數的選擇
                Case 0                                              '兩個參數的情況
                  x = ComMu(3,4)                                '調用函數過程
                  TxtShow.Text = x                                 '顯示調用后的結果
                  LabShow.Caption = "傳遞兩個參數為:3,4"       '顯示選擇的情況
                Case 1                                              '三個參數的情況
                  y = ComMu(3,4,5)                             '調用函數過程
                  TxtShow.Text = y                                 '顯示調用后的結果
                  LabShow.Caption = "傳遞三個參數為:3,4,5"    '顯示選擇的情況
            End Select
        End Sub
        Private Sub CmbSelC_Click()
            Select Case CmbSelC.ListIndex                   '根據組合框中的選項決定顏色值的選擇
            Case 0
                Call VChange(0)                          '調用通用過程
                LabShowY.Caption = "顯示顏色為暗黑色"    '顯示顏色值
            Case 1
                Call VChange(1)                          '調用通用過程
                LabShowY.Caption = "顯示顏色為藍色"      '顯示顏色值
            Case 2
                Call VChange(2)                          '調用通用過程
                LabShowY.Caption = "顯示顏色為綠色"      '顯示顏色值
            Case 3
                Call VChange(3)                          '調用通用過程
                LabShowY.Caption = "顯示顏色為墨綠色"    '顯示顏色值
            Case 4
                Call VChange(4)                          '調用通用過程
                LabShowY.Caption = "顯示顏色為褐紅色"    '顯示顏色值
            Case 5
                Call VChange(5)                          '調用通用過程
                LabShowY.Caption = "顯示顏色為紫紅色"    '顯示顏色值
            Case 6
                Call VChange(6)                          '調用通用過程
                LabShowY.Caption = "顯示顏色為黃綠色"    '顯示顏色值
            End Select
        End Sub
        '分別初始化組合框CmbSel和CmbSelC
        Private Sub Form_Load()
            CmbSel.AddItem "傳遞兩個參數"                '添加傳遞參數個數
            CmbSel.AddItem "傳遞三個參數"                '添加傳遞參數個數
            CmbSelC.AddItem "0"                          '添加顏色數
            CmbSelC.AddItem "1"                          '添加顏色數
            CmbSelC.AddItem "2"                          '添加顏色數
            CmbSelC.AddItem "3"                          '添加顏色數
            CmbSelC.AddItem "4"                          '添加顏色數
            CmbSelC.AddItem "5"                          '添加顏色數
            CmbSelC.AddItem "6"                          '添加顏色數
        End Sub
        Private Function ComMu(a As Integer,b As Integer,Optional c As Integer = 10)
            ComMu = a * b* c                               '可選參數有默認值的情況
        End Function
        Private Sub VChange(Index As Integer)
            Shape1.FillStyle = 1                           '設置Shape的FillStyle屬性
            Shape1.BackStyle = 1                           '設置Shape的BackStyle屬性
            Shape1.BackColor = QBColor(Index)            '設置Shape的BackColor屬性
        End Sub

按Ctrl+S組合鍵保存工程,然后按F5鍵運行工程。當選擇組合框中“傳遞兩個參數”選項時,程序運行結果如圖4.7所示。當選擇組合框中“傳遞三個參數”和“0”選項時,程序運行結果如圖4.8所示。

圖4.7 傳遞兩個參數的界面圖

圖4.8 顏色值為0的界面圖

源程序解讀

(1)代碼首先定義了兩個整型變量x和y,作為存儲乘積結果變量。

(2)在Form_ Load()事件中,分別初始化“CmbSel”組合框和“CmbSelC”組合框。分別添加傳遞參數的個數和顏色值。

(3)當單擊“CmbSel”組合框時,就觸發CmbSel的Click事件,從而調用事件過程Private Sub CmbSel_ Click()。

(4)在CmbSel_ Click()事件中,運用Select Case語句,根據CmbSel的ListIndex屬性決定傳遞參數的個數。當ListIndex=0時,調用ComMu(3,4),表示傳遞參數為兩個。當ListIndex=1時,調用ComMu(3,4,5),表示傳遞參數為三個。

(5)在函數過程Private Function ComMu(a As Integer,b As Integer,Optional c As Integer= 10)中,可以看出,可選參數有默認值10,因此,語句只有一個,即ComMu = a *b *c,當傳遞兩個參數時,c=10參與運算,當傳遞參數為三個時,c以傳遞的值參與運算。計算出結果后,返回調用過程CmbSel_ Click(),并分別用文本框和標簽顯示出計算結果和傳遞參數的情況。

(6)當單擊“CmbSelC”組合框時,就觸發CmbSelC的Click事件,調用事件過程Private Sub CmbSelC_ Click()。

(7)在CmbSelC_ Click()事件中,運用Select Case語句,根據CmbSelC的ListIndex屬性決定傳遞顏色的值。當ListIndex=0時,調用通用過程Call VChange(0),表示顏色值為0。當ListIndex=1時,調用通用過程Call VChange(1),表示顏色值為1。當ListIndex=2時,調用通用過程Call VChange(2),表示顏色值為2。當ListIndex=3時,調用通用過程Call VChange(3),表示顏色值為3。當ListIndex=4時,調用通用過程Call VChange(4),表示顏色值為4。當ListIndex=5時,調用通用過程Call VChange(5),表示顏色值為5。

(8)在通用過程Private Sub VChange(Index As Integer)中,由行式參數Index接受傳遞的參數。首先由Shape控件的FillStyle和BackStyle屬性分別設置形狀的填充類型和背景類型。然后,由BackColor屬性設置形狀的背景色。設置完返回調用過程CmbSelC_ Click(),并由標簽顯示顏色的值。

主站蜘蛛池模板: 乐平市| 龙门县| 原平市| 定安县| 磴口县| 盐源县| 莲花县| 潢川县| 罗江县| 徐州市| 富阳市| 镶黄旗| 内江市| 深州市| 苏尼特左旗| 贺州市| 昭平县| 林甸县| 四平市| 桑日县| 政和县| 根河市| 叙永县| 堆龙德庆县| 荣昌县| 宝坻区| 光泽县| 保靖县| 峨眉山市| 芜湖市| 芦溪县| 信阳市| 延津县| 分宜县| 静安区| 保德县| 铁岭市| 临湘市| 屏山县| 北票市| 航空|