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

第2章 數(shù)組

第1章介紹了VB的語言基礎(chǔ),對VB的標(biāo)識符、常量、變量、數(shù)據(jù)類型等知識已經(jīng)有所了解,這是VB編程的基礎(chǔ)。在VB中,除了上面提到的語言基礎(chǔ)之外,還有一種非常重要的VB語言基礎(chǔ)——數(shù)組,數(shù)組是一種存儲多個元素的數(shù)據(jù)結(jié)構(gòu),數(shù)組中每個元素具有相同的數(shù)據(jù)類型,并且按照一定的順序排列。數(shù)組在編程中主要運用在矩陣運算、表格的輸出、數(shù)據(jù)排序等方面。數(shù)組的運用在很大程度上方便了書寫過程,但也增加了出錯的幾率,因此在使用數(shù)組的過程中要特別注意,本章就是在這樣的基礎(chǔ)上介紹數(shù)組的相關(guān)知識。

2.1 一維數(shù)組應(yīng)用

按照維數(shù),數(shù)組可以分為一維數(shù)組和多維數(shù)組。首先介紹簡單的一維數(shù)組,顧名思義,這種數(shù)組只有一個維,即只有一個下標(biāo)。本節(jié)運用實例來介紹一維數(shù)組的應(yīng)用實例,即對輸入的數(shù)據(jù)序列進(jìn)行排序。

技術(shù)要點

在本實例中主要用到了運用一維數(shù)組和For循環(huán)語句,主要功能和用法如下:

●一維數(shù)組,主要用來存放一系列的數(shù)據(jù),存放的數(shù)據(jù)可以是任意數(shù)據(jù)類型。使用一維數(shù)組之前要先定義該數(shù)組。

● For循環(huán)語句主要是控制對數(shù)組的執(zhí)行。詳細(xì)在下面章節(jié)介紹。

一維數(shù)組的主要語法為:

        [Public|Private]數(shù)組名(數(shù)組大小)As數(shù)組中元素類型

其中Public和Private參數(shù)主要限定數(shù)組的使用范圍,如果是Public,說明數(shù)組是全局?jǐn)?shù)組;如果是Private,說明數(shù)組是局部數(shù)組;參數(shù)“數(shù)組名”,就是對數(shù)組的命名,命名規(guī)則與標(biāo)識符的命名規(guī)則一樣;參數(shù)“數(shù)組大小”,對于固定數(shù)組來說,這個參數(shù)要求定義,并且數(shù)組大小=數(shù)組長度-1,這是因為數(shù)組的第一個元素的下標(biāo)是0,對于動態(tài)數(shù)組,若參數(shù)實現(xiàn)的不確定,就不必設(shè)定,只有當(dāng)確定之后才使用如下語法定義:

        ReDim 數(shù)組名(數(shù)組大小)

數(shù)組中的元素類型,表示數(shù)組中存儲的元素的數(shù)據(jù)類型,這些數(shù)據(jù)類型可以是任意的。

說明:對于數(shù)組的定義,最常用的是使用Dim語句,具體語法為:

        Dim 數(shù)組名(數(shù)組大小)As數(shù)組中元素類型

實現(xiàn)代碼

        Dim Arr(10)As Integer                                            '定義數(shù)組存放輸入的數(shù)據(jù)
        Private Sub CmdShow_Click()
            Dim i As Integer                                               '定義循環(huán)變量
            For i = 0 To 9                                                 '排序
                TxtShow.Text = TxtShow.Text & Arr(9 - i)&""           '顯示倒序結(jié)果
            Next i
        End Sub
        Private Sub Form_Load()
            Dim i As Integer                                               '定義循環(huán)變量
            For i = 0 To 9                                                 '循環(huán)輸入排序的數(shù)據(jù)序列
                Arr(i)=I                                                '給數(shù)組賦初始值
                TxtSource.Text = TxtSource.Text & Arr(i)&""           '顯示初始結(jié)果
            Next i
        End Sub

單擊工具欄中的保存按鈕,保存工程,然后單擊工具欄中的啟動按鈕,運行工程,程序的運行結(jié)果如圖2.1所示。

圖2.1 程序運行界面圖

單擊工具欄中的結(jié)束按鈕,或者單擊運行窗口的關(guān)閉按鈕,結(jié)束程序的運行。

源程序解讀

(1)代碼首先定義了一個數(shù)組名為Arr數(shù)組大小為9的一維數(shù)組Arr(9),并且數(shù)組中的元素類型是整型。

(2)在Form_ Load()事件中,運用For循環(huán)語句對數(shù)組賦初值,并且由“TxtSource”文本框顯示出來。當(dāng)單擊“CmdShow”按鈕時,就觸發(fā)CmdShow_ Click()事件。

(3)在CmdShow_ Click()事件中,同樣運用For循環(huán)語句執(zhí)行對數(shù)組中元素的倒序操作,并且結(jié)果由“TxtShow”文本框顯示出來。

2.2 從數(shù)組中刪除奇數(shù)元素

在上一節(jié)中簡單介紹了一維數(shù)組的運用,其中重點介紹了一維數(shù)組的定義方式。本節(jié)通過一個從數(shù)組中刪除奇數(shù)元素的實例繼續(xù)介紹一維數(shù)組的運用,其中將重點介紹數(shù)組的重定義方式。

技術(shù)要點

本實例中主要用到的技術(shù)是動態(tài)數(shù)組的定義和數(shù)組的重定義。主要功能和用法如下:

●動態(tài)數(shù)組,顧名思義,是指大小不確定的數(shù)組。于是在定義這類數(shù)組時不能像定義固定數(shù)組那樣指明數(shù)組的大小。主要使用Dim語句進(jìn)行聲明。

●數(shù)組的重定義,就是對數(shù)組的重新定義。對于動態(tài)數(shù)組而言,開始數(shù)組的大小不確定,但是一旦在使用之前確定數(shù)組的大小,就要對數(shù)組使用ReDim語句重新聲明。

動態(tài)數(shù)組定義的具體語法如下:

        Dim 數(shù)組名()As數(shù)組中元素類型

盡管數(shù)組大小不確定,但是表示數(shù)組大小的“()”不能省略。數(shù)組重定義的具體語法為:

        ReDim 數(shù)組名(數(shù)組大小)As數(shù)組中元素類型

說明:數(shù)組重聲明中的的數(shù)組名應(yīng)該與初始聲明動態(tài)數(shù)組時的數(shù)組名一樣。并且數(shù)組的重聲明除了對動態(tài)數(shù)組使用外,還可以對固定數(shù)組使用。

實現(xiàn)代碼

        Dim Arr()As Integer                                       '定義動態(tài)數(shù)組
        Private Sub Form_Load()
            Dim i As Integer                                        '定義循環(huán)變量
            ReDim Arr(7)As Integer                                '重新定義數(shù)組
            For i = 0 To 7
                Arr(i)=I                                         '給數(shù)組初始化
                TxtS.Text = TxtS.Text & Arr(i)&""              '顯示原始數(shù)組
            Next i
            For i = 0 To 3
                Arr(i)=Arr(2*i)                                '刪除數(shù)組中的奇數(shù)
                TxtShow.Text = TxtShow.Text & Arr(i)& " "      '顯示最終結(jié)果
            Next i
        End Sub

按Ctrl+S組合鍵保存工程,然后按F5鍵運行工程。單擊啟動按鈕后,程序的運行結(jié)果如圖2.2所示。

圖2.2 程序運行結(jié)果圖

源程序解讀

(1)代碼首先定義動態(tài)數(shù)組Arr(),數(shù)組中元素類型為整型。

(2)在Form_ Load()事件中,對數(shù)組重新聲明為Arr(7),即定義數(shù)組長度為8。

(3)接下來運用For循環(huán)語句對數(shù)組初始化,并且由“TxtS”文本框顯示初始數(shù)據(jù)。

(4)最后再次運用For循環(huán)語句,執(zhí)行從數(shù)組中刪除奇數(shù)元素的操作,并由“TxtShow”文本框顯示最終結(jié)果。

2.3 二維數(shù)組的應(yīng)用

本節(jié)介紹二維數(shù)組的應(yīng)用實例,即矩陣的乘法,二維數(shù)組,顧名思義,有兩維,即有兩個下標(biāo)。

技術(shù)要點

本實例運用的主要技術(shù)是二維數(shù)組的定義,框架Frame控件,文本框控件TextBox數(shù)組,主要功能和用法如下:

●二維數(shù)組的定義,即聲明二維數(shù)組,一般用來表示矩陣,由兩個坐標(biāo)表示的圖表、圖形等。主要使用Dim語句進(jìn)行。

●框架控件Frame一般用來作為其他控件的容器,主要使界面看起來比較整潔,在本實例中,F(xiàn)rame用作文本框控件的容器。

●文本框控件數(shù)組,主要是為了表示的方便而采用。

二維數(shù)組定義的具體語法為:

        Dim 數(shù)組名(下標(biāo)1,下標(biāo)2)As數(shù)組中元素的數(shù)據(jù)類型

其中,下標(biāo)1表示二維數(shù)組中行的大小,即行長度-1;下標(biāo)2表示二維數(shù)組中列的大小,即列長度-1。

實現(xiàn)代碼

        Dim ArrM(2,3)As Integer                                '定義M矩陣
        Dim ArrN(3,3)As Integer                                '定義N矩陣
        Dim ArrR(2,3)As Integer                                '定義結(jié)果矩陣
        Private Sub Form_Load()
            Dim i,j,k As Integer                                 '定義循環(huán)變量
            ArrM(0,0)= 3                                      '給M矩陣的第1個元素賦值
            ArrM(0,1)= 0                                      '給M矩陣的第2個元素賦值
            ArrM(0,2)= 0                                      '給M矩陣的第3個元素賦值
            ArrM(0,3)= 5                                      '給M矩陣的第4個元素賦值
            ArrM(1,0)= 0                                      '給M矩陣的第5個元素賦值
            ArrM(1,1)= -1                                     '給M矩陣的第6個元素賦值
            ArrM(1,2)= 0                                      '給M矩陣的第7個元素賦值
            ArrM(1,3)= 0                                                    '給M矩陣的第8個元素賦值
            ArrM(2,0)= 2                                                    '給M矩陣的第9個元素賦值
            ArrM(2,1)= 0                                                    '給M矩陣的第10個元素賦值
            ArrM(2,2)= 0                                                    '給M矩陣的第11個元素賦值
            ArrM(2,3)= 1                                                    '給M矩陣的第12個元素賦值
            ArrN(0,0)= 0                                                    '給N矩陣的第1個元素賦值
            ArrN(0,1)= 2                                                    '給N矩陣的第2個元素賦值
            ArrN(0,2)= 2                                                    '給N矩陣的第3個元素賦值
            ArrN(0,3)= 1                                                    '給N矩陣的第4個元素賦值
            ArrN(1,0)= 1                                                    '給N矩陣的第5個元素賦值
            ArrN(1,1)= 0                                                    '給N矩陣的第6個元素賦值
            ArrN(1,2)= 3                                                    '給N矩陣的第7個元素賦值
            ArrN(1,3)= 4                                                    '給N矩陣的第8個元素賦值
            ArrN(2,0)= -2                                                   '給N矩陣的第9個元素賦值
            ArrN(2,1)= 4                                                    '給N矩陣的第10個元素賦值
            ArrN(2,2)= -3                                                   '給N矩陣的第11個元素賦值
            ArrN(2,3)= 0                                                    '給N矩陣的第12個元素賦值
            ArrN(3,0)= 1                                                    '給N矩陣的第13個元素賦值
            ArrN(3,1)= 0                                                    '給N矩陣的第14個元素賦值
            ArrN(3,2)= -5                                                   '給N矩陣的第15個元素賦值
            ArrN(3,3)= 7                                                    '給N矩陣的第16個元素賦值
            For i = 0 To 3
                TxtM1(i).Text = ArrM(0,i)                                 '顯示M矩陣的第一行元素
                TxtM2(i).Text = ArrM(1,i)                                 '顯示M矩陣的第二行元素
                TxtM3(i).Text = ArrM(2,i)                                 '顯示M矩陣的第三行元素
                TxtN1(i).Text = ArrN(0,i)                                 '顯示N矩陣的第一行元素
                TxtN2(i).Text = ArrN(1,i)                                 '顯示N矩陣的第二行元素
                TxtN3(i).Text = ArrN(2,i)                                 '顯示N矩陣的第三行元素
                TxtN4(i).Text = ArrN(3,i)                                 '顯示N矩陣的第四行元素
            Next i
            For i = 0 To 2
                For j = 0 To 3
                    ArrR(i,j)= 0                                            '初始化結(jié)果矩陣
                    For k = 0 To 3
                      ArrR(i,j)=ArrR(i,j)+ArrM(i,k)*ArrN(k,j)      '計算矩陣乘積
                    Next k
                Next j
            Next i
            For i = 0 To 3
                TxtR1(i)= ArrR(0,i)                                       '顯示結(jié)果矩陣的第一行
                TxtR2(i)= ArrR(1,i)                                       '顯示結(jié)果矩陣的第二行
                TxtR3(i)= ArrR(2,i)                                       '顯示結(jié)果矩陣的第三行
            Next i
        End Sub

按Ctrl+S快捷鍵保存工程,然后按F5鍵運行工程。單擊啟動按鈕后,程序的運行結(jié)果如圖2.3所示。

圖2.3 程序運行結(jié)果界面圖

源程序解讀

(1)代碼首先定義了三個二維數(shù)組:ArrM(2,3),表示M矩陣;ArrN(3,3),表示N矩陣;ArrR(2,3)表示兩個矩陣乘積的結(jié)果矩陣。

(2)在Form_ Load()事件中,首先定義三個整型循環(huán)變量。然后分別給M矩陣和N矩陣賦初值。接下來分別由“TxtM”文本框數(shù)組和“TxtN”文本框數(shù)組顯示M矩陣和N矩陣的初始值。

(3)代碼的重心在于運用三重For循環(huán)執(zhí)行兩個矩陣的乘積。三重循環(huán)分別由循環(huán)變量i,j,k控制,最終計算結(jié)果存儲在數(shù)組ArrR()中,并由“TxtR”文本框數(shù)組顯示出來。

2.4 Array給數(shù)組賦值

本節(jié)介紹另外一種給數(shù)組賦值的方法——Array函數(shù)的應(yīng)用實例,即給數(shù)組賦值。

技術(shù)要點

本實例中主要運用的技術(shù)是Array函數(shù)和DBGrid控件,主要功能和用法如下:

● Array函數(shù),主要對數(shù)組進(jìn)行數(shù)據(jù)的輸入。

● DBGrid控件,是一種快速、便捷訪問數(shù)據(jù)庫的控件,在后面數(shù)據(jù)庫處理篇中,將詳細(xì)介紹此控件。

Array函數(shù)的具體語法為:

        數(shù)組名=Array(數(shù)值表)

其中,數(shù)值表中的數(shù)據(jù)就是數(shù)組中元素的值,數(shù)據(jù)之間用逗號隔開,并且這些數(shù)據(jù)可以具有不同的數(shù)據(jù)類型,因此,數(shù)組聲明時不需要定義數(shù)組中元素的數(shù)據(jù)類型,數(shù)組中的數(shù)據(jù)類型由數(shù)值表中的數(shù)據(jù)決定。這時定義數(shù)組的方法有如下兩種:

        Dim 數(shù)組名()As Variant
        Dim 數(shù)組名()

另外,由Array函數(shù)賦值的數(shù)組的下界是0,上界由數(shù)值表中的數(shù)據(jù)個數(shù)決定。

說明:Array函數(shù)對數(shù)組賦值后,在使用數(shù)組之前應(yīng)該根據(jù)數(shù)值表中數(shù)據(jù)的個數(shù)對數(shù)據(jù)重新聲明,并且Array函數(shù)的賦值一般針對一維數(shù)組。

實現(xiàn)代碼

        Private Sub Form_Load()
            Dim ArrayWidth()                                      '定義每列的寬度值
            Dim ArrayTableHead()                                  '定義表頭數(shù)組
            Dim i As Integer                                         '定義循環(huán)變量
            '設(shè)置每一列的寬度值
            ArrayWidth = Array("1000","1000","500","500","2000","1000","2000","3000")
            '給表頭賦值
            ArrayTableHead = Array("學(xué)號","姓名","性別","年齡","籍貫","班級","學(xué)校","備注")
            ReDim Preserve ArrayWidth(7)                           '重新定義動態(tài)數(shù)組
            ReDim Preserve ArrayTableHead(7)                       '重新定義動態(tài)數(shù)組
            For i = 0 To 7
                MS1.ColWidth(i)= ArrayWidth(i)                  '設(shè)置列寬
                MS1.TextMatrix(0,i)= ArrayTableHead(i)         '表頭賦值
            Next
            MS1.Row = 1                                             '設(shè)置MS1的行數(shù)
            MS1.Cols = 8                                            '設(shè)置MS1的列數(shù)
            Adodc1.RecordSource = "select * from Table1"           '從數(shù)據(jù)庫中獲得表中的數(shù)據(jù)
            Adodc1.Refresh
            If Adodc1.Recordset.RecordCount > 0 Then
                Do While Adodc1.Recordset.EOF=False                  '將記錄顯示到MS1控件中
                  MS1.TextMatrix(MS1.Row,0)= Adodc1.Recordset.Fields("學(xué)號")
                  MS1.TextMatrix(MS1.Row,1)= Adodc1.Recordset.Fields("姓名")
                  MS1.TextMatrix(MS1.Row,2)= Adodc1.Recordset.Fields("性別")
                  MS1.TextMatrix(MS1.Row,3)= Adodc1.Recordset.Fields("年齡")
                  MS1.TextMatrix(MS1.Row,4)= Adodc1.Recordset.Fields("籍貫")
                  MS1.TextMatrix(MS1.Row,5)= Adodc1.Recordset.Fields("班級")
                  MS1.TextMatrix(MS1.Row,6)= Adodc1.Recordset.Fields("學(xué)校")
                  MS1.TextMatrix(MS1.Row,7)= Adodc1.Recordset.Fields("備注")
                  MS1.Row = MS1.Row + 1                             '列遞增
                  Adodc1.Recordset.MoveNext                         '指向下一條記錄
                Loop
            End If
        End Sub

按Ctrl+S組合鍵保存工程,然后按F5鍵運行工程。單擊啟動按鈕后,程序的運行結(jié)果如圖2.4所示。

圖2.4 程序運行結(jié)果界面圖

源程序解讀

(1)在Form_ Load()事件中,首先定義兩個一維數(shù)組ArrayWidth()和ArrayTableHead()。這兩個數(shù)組的大小和數(shù)組中元素的數(shù)據(jù)類型都不確定。

(2)接下來由Array函數(shù)給兩個數(shù)組賦初值。由此確定兩個數(shù)組的大小和數(shù)組中元素的數(shù)據(jù)類型。由此可以重新聲明兩個數(shù)組為:ArrayWidth(7)和ArrayTableHead(7)。

(3)最后由已知的數(shù)組設(shè)置DBGrid控件的列寬和表頭,并訪問數(shù)據(jù)庫,從數(shù)據(jù)庫中逐條得到記錄的信息。

2.5 使用二維數(shù)組分析圖表數(shù)據(jù)

在前面幾節(jié)中提到數(shù)組的運用除了矩陣的運算、數(shù)據(jù)排序外,還有就是對圖表的處理。本節(jié)介紹一個使用二維數(shù)組分析圖表數(shù)據(jù)的例子,從中希望讀者能夠了解一下圖表的知識。

技術(shù)要點

本節(jié)實例中主要使用的技術(shù)是MSChart控件及其ChartData屬性和Title屬性。主要功能和用法如下:

● MSChart控件是一種Active X控件,主要用來動態(tài)顯示隨機數(shù)據(jù)和數(shù)組,用于所有圖表類型。

● MSChart控件的ChartData屬性,主要用于設(shè)置繪制圖表的數(shù)據(jù),返回值是一個二維數(shù)組。這個屬性是繪制圖表必須的屬性,也是MSChart控件的默認(rèn)屬性。

● MsChart控件的Title屬性,用來設(shè)置繪制圖表的標(biāo)題,一般情況下,在編程過程中,這個屬性要求被提供,但是對于圖表含義不要求明確給出時,可以省略。

實現(xiàn)代碼

        Private Sub Form_Load()
            Dim ArrSale(7,1)                             '定義二維數(shù)組
            ArrSale(0,0)= "一月"                       '給數(shù)組的第一列賦值
            ArrSale(1,0)= "二月"                         '給數(shù)組的第一列第一個元素賦值為"二月"
            ArrSale(2,0)= "三月"                         '給數(shù)組的第一列第二個元素賦值為"三月"
            ArrSale(3,0)= "四月"                         '給數(shù)組的第一列第三個元素賦值為"四月"
            ArrSale(4,0)= "五月"                         '給數(shù)組的第一列第四個元素賦值為"五月"
            ArrSale(5,0)= "六月"                         '給數(shù)組的第一列第五個元素賦值為"六月"
            ArrSale(6,0)= "七月"                         '給數(shù)組的第一列第六個元素賦值為"七月"
            ArrSale(7,0)="八月"                          '給數(shù)組的第一列第七個元素賦值為"八月"
            ArrSale(0,1)= 82000                            '給數(shù)組的第二列賦值
            ArrSale(1,1)= 45000                            '給數(shù)組的第二列第一個元素賦值為"45000"
            ArrSale(2,1)= 12800                            '給數(shù)組的第二列第一個元素賦值為"12800"
            ArrSale(3,1)= 32000                            '給數(shù)組的第二列第一個元素賦值為"32000"
            ArrSale(4,1)= 20000                            '給數(shù)組的第二列第一個元素賦值為"20000"
            ArrSale(5,1)= 66800                            '給數(shù)組的第二列第一個元素賦值為"66800"
            ArrSale(6,1)= 65000                            '給數(shù)組的第二列第一個元素賦值為"65000"
            ArrSale(7,1)= 78023                            '給數(shù)組的第二列第一個元素賦值為"78023"
            MSChart1.ChartData = ArrSale                      '給圖表賦值,分析銷售額
            MSChart1.Title = "一片天公司2008年八個月的銷售額分析(單位:萬元)"   '給圖表添加標(biāo)題
        End Sub

按Ctrl+S組合鍵保存工程,然后按F5鍵運行工程。單擊啟動按鈕后,程序的運行結(jié)果如圖2.5所示。

圖2.5 程序運行結(jié)果圖

源程序解讀

(1)在Form_ Load()事件中,首先定義一個二維數(shù)組ArrSale(7,1),該數(shù)組中元素的數(shù)據(jù)類型不確定,即是Variant類型。

(2)接下來分別給二維數(shù)組的第一列和第二列賦值,由賦值的情況可以看出,第一列中元素的數(shù)據(jù)類型是字符串型,第二列中元素的數(shù)據(jù)類型是整型。

(3)最后把二維數(shù)組的值賦值給MSChart控件的ChartData屬性,獲得繪制圖表的數(shù)據(jù)。運用MSChart控件的Title屬性給繪制成的圖表命名。

2.6 利用控件數(shù)組設(shè)置形狀控件屬性的實例

在上一節(jié)中,分別介紹了一維和二維數(shù)組的運用實例,除此之外,在有的實例中還用到了控件數(shù)組,即由一些類型相同功能相近的控件組成的數(shù)組,與數(shù)組變量一樣,這些數(shù)組具有相同的名稱,通過下標(biāo)區(qū)別控件數(shù)組中的元素。在編程過程中,使用控件數(shù)組可以節(jié)省系統(tǒng)內(nèi)部資源,增加程序的可讀性。

技術(shù)要點

本實例中使用的主要技術(shù)是按鈕控件CommandButton數(shù)組及Click事件,形狀控件Shape數(shù)組和標(biāo)簽控件Label數(shù)組。

按鈕控件數(shù)組、形狀控件數(shù)組和標(biāo)簽控件數(shù)組都使用了控件數(shù)組,所以,可以統(tǒng)一介紹,運用控件數(shù)組首先要了解控件數(shù)組的創(chuàng)建方法,創(chuàng)建控件數(shù)組的方式大致有如下三種:

●與數(shù)組變量的定義類似,在代碼中給控件定義相同的控件名稱。

●最簡單的一種是在對象窗口中直接對要創(chuàng)建數(shù)組的控件進(jìn)行復(fù)制、粘貼。

●最后一種是在控件的屬性窗口中把Index屬性的值設(shè)置為非Null數(shù)值。

創(chuàng)建控件數(shù)組之后就是控件數(shù)組的運用,運用控件數(shù)組一般使用For循環(huán)語句,根據(jù)控件數(shù)組的下標(biāo),即Index屬性分別對控件數(shù)組中的元素賦值。但是有時需要使用Select Case語句,如本例中的按鈕控件。

按鈕控件數(shù)組的Click事件,即CmdArray_ Click(Index As Integer),可以看出此處Click事件后面附加有參數(shù) Index,這就是按鈕控件數(shù)組的下標(biāo),在本事件中,就使用了 Select Case語句,根據(jù)參數(shù)Index視不同情況執(zhí)行不同的操作,執(zhí)行操作的類別由Index的數(shù)值決定,在本實例中,Index有五種取值方式,分別為:0,執(zhí)行對圖形形狀的設(shè)置;1,執(zhí)行對圖形顏色的設(shè)置;2,執(zhí)行對圖形填充形狀的設(shè)置;3,執(zhí)行對圖形邊框形狀的設(shè)置;4,執(zhí)行退出窗體的操作。

實現(xiàn)代碼

        Private Sub CmdArray_Click(Index As Integer)
        Select Case Index
        Case 0
            For i = 0 To 5
                Shape1(i).BorderStyle = I                        '設(shè)置Shape的BorderStyle屬性
                Label2(i).Caption = "BorderStyle=" &Str$(i)  '顯示設(shè)置屬性值
            Next i
        Case 1
            For i = 0 To 5
                Shape1(i).FillStyle = 1                          '設(shè)置Shape的FillStyle屬性
                Shape1(i).BackStyle = 1                          '設(shè)置Shape的BackStyle屬性
                Shape1(i).BackColor = QBColor(i)               '設(shè)置Shape的BackColor屬性
                Label2(i).Caption = "BackColor=" & Str$(i) '顯示設(shè)置屬性值
            Next i
        Case 2
            For i = 0 To 5
                Shape1(i).FillStyle = i + 2                      '設(shè)置Shape的FillStyle屬性
                Label2(i).Caption = "FillStyle=" & Str$(i + 2)      '顯示設(shè)置屬性值
            Next i
        Case 3
            For i = 0 To 5
                Shape1(i).Shape = i                                     '設(shè)置Shape的Shape屬性
                Label2(i).Caption = "Shape=" & Str$(i)              '顯示設(shè)置屬性值
            Next i
        Case 4
            Unload Me                                                     '退出系統(tǒng)
        End Select
        End Sub

按Ctrl+S組合鍵保存工程,然后按F5鍵運行工程。當(dāng)單擊形狀設(shè)置按鈕時,程序運行結(jié)果如圖2.6所示。當(dāng)單擊“顏色設(shè)置”按鈕時,程序運行結(jié)果如圖2.7所示。

圖2.6 形狀設(shè)置界面圖

圖2.7 顏色設(shè)置界面圖

源程序解讀

(1)運行工程,出現(xiàn)初始界面。這時當(dāng)鼠標(biāo)單擊按鈕控件數(shù)組CmdArray()時,觸發(fā)CmdArray_ Click(Index As Integer)事件。在該事件中,運用Select Case語句,根據(jù)參數(shù)Index的數(shù)值,分別執(zhí)行對形狀圖形的操作。

(2)當(dāng)單擊“形狀設(shè)置”按鈕時,Index=0,這時通過Shape數(shù)組的BorderStyle屬性設(shè)置圖形的形狀。當(dāng)單擊“顏色設(shè)置”按鈕時,Index=1,這時通過Shape數(shù)組的BackColor屬性設(shè)置圖形的顏色。當(dāng)單擊“填充線條設(shè)置”按鈕時,Index=2,這時通過Shape數(shù)組的FillStyle屬性設(shè)置圖形的填充形狀。當(dāng)單擊“邊框形狀設(shè)置”按鈕時,Index=3,這時通過Shape數(shù)組的Shape屬性設(shè)置圖形的邊框形狀。當(dāng)單擊“退出系統(tǒng)”按鈕時,Index=4,這時退出窗體。

(3)在執(zhí)行圖形屬性設(shè)置的同時,使用“Label”標(biāo)簽控件數(shù)組,在圖形的下面,顯示設(shè)置屬性的類別和設(shè)置的屬性值。這個功能主要通過Label的Caption屬性實現(xiàn)。

2.7 利用控件數(shù)組控制按鈕的增減

在上一節(jié)中介紹了控件數(shù)組的使用,主要介紹了控件數(shù)組的創(chuàng)建和運用方法,為了使得讀者對控件數(shù)組有更深入的理解,本節(jié)接著介紹控件數(shù)組的運用實例,即控件數(shù)組的動態(tài)創(chuàng)建。

技術(shù)要點

本節(jié)使用的主要技術(shù)是單選按鈕Option控件數(shù)組和工具欄ToolBar控件,主要功能和用法如下:

●單選按鈕Option控件,指的是多種選項同時存在時,一次只能選擇一個選項,執(zhí)行一種操作,單選按鈕數(shù)組就是多個單選按鈕使用相同的名稱,只是下標(biāo)是不同的組合。在本實例中,單選按鈕控件數(shù)組都使用 Option1 這個名稱,最大的下標(biāo)是5。

●工具欄ToolBar控件,顧名思義,主要用來在窗體上創(chuàng)建工具欄,該控件中包含創(chuàng)建工具欄的ToolBarButton對象的集合,該控件是Active X的一種。

實現(xiàn)代碼

        Private Sub Option1_Click(Index As Integer)
            Shape1.Shape = Index                                              '設(shè)置形狀控件的形狀
            LabShow.Caption = "Shape=" & Inde                               '顯示形狀類型
        End Sub
        Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
            Static IndexNum As Integer                                          '定義單選按鈕的個數(shù)
            Select Case Button
                Case"增加單選按鈕"                                          '增加單選按鈕
                IndexNum = IndexNum + 1                                       '單選按鈕的數(shù)目增1
                If IndexNum > 5 Then
                  IndexNum = 5                                                '限定單選按鈕的數(shù)目為5
                  Exit Sub
                End If
                Load Option1(IndexNum)                                      '建立新的控件數(shù)組元素
                Option1(IndexNum).Top=Option1(IndexNum-1).Top+360         '指定控件位置
                Option1(IndexNum).Caption="Option("&IndexNum&")"      '指定選項按鈕控件的Caption屬性
                Option1(IndexNum).Visible = True                            '使選項按鈕可見
                Case"刪除單選按鈕"                                          '卸載單選按鈕
                    If IndexNum > 0 Then
                      Unload Option1(IndexNum)
                      IndexNum = IndexNum - 1                                 '單選按鈕的數(shù)目減1
                  End If
            End Select
        End Sub

按Ctrl+S組合鍵保存工程,然后按F5鍵運行工程。當(dāng)單擊單選按鈕“Option(0)”時,程序的運行結(jié)果如圖2.8所示。當(dāng)單擊“增加單選按鈕”按鈕并單擊單選按鈕“Option(2)”時,程序的運行結(jié)果如圖2.9所示。當(dāng)單擊單選按鈕“Option(5)”時,程序的運行結(jié)果如圖2.10所示。當(dāng)單擊“刪除單選按鈕”按鈕時,程序的運行結(jié)果如圖2.11所示。

圖2.8 單個單選按鈕的界面圖

圖2.9 增加4個并選中第三個單選按鈕的界面圖

圖2.10 增加5個并選中第六個單選按鈕的界面圖

圖2.11 刪除第六個單選按鈕的界面圖

源程序解讀

(1)在“Toolbar1”工具欄的Click事件,即Toolbar1_ ButtonClick(ByVal Button As MSComctlLib.Button)中,首先定義整型變量IndexNum,表示單選按鈕的個數(shù)。然后運用Select Case語句,根據(jù)參數(shù)Button的值,分別執(zhí)行增加單選按鈕和刪除單選按鈕的操作。

(2)當(dāng)單擊按鈕“增加單選按鈕”時,就執(zhí)行Case "增加單選按鈕"對應(yīng)的語句體。首先讓IndexNum加1,即單選按鈕的數(shù)目加1。接著使用If語句判斷IndexNum的大小是否超過5,若超過,仍然讓IndexNum=5,并退出過程;否則,使用Load語句加載一個單選按鈕,同時設(shè)置單選按鈕的屬性。

(3)當(dāng)單擊按鈕“刪除單選按鈕”時,執(zhí)行Case "刪除單選按鈕"對應(yīng)的語句體。判斷IndexNum的大小是否大于0,即單選按鈕是否全部被刪除。如果大于0,則使用Unload語句卸載單選按鈕,并把IndexNum減1。

說明:Toolbar1_ ButtonClick(ByVal Button As MSComctlLib.Button)中參數(shù)Button的數(shù)據(jù)類型是按鈕對象類型。

主站蜘蛛池模板: 安庆市| 乐东| 新密市| 高邮市| 滨海县| 克东县| 大石桥市| 上高县| 临泉县| 青州市| 田阳县| 广东省| 平江县| 云和县| 友谊县| 宝鸡市| 蕉岭县| 恩施市| 牙克石市| 二连浩特市| 明溪县| 瑞安市| 灵寿县| 潜江市| 额敏县| 六安市| 津南区| 封丘县| 新营市| 汝州市| 江永县| 黄龙县| 霞浦县| 德保县| 九寨沟县| 公主岭市| 舒城县| 瑞昌市| 横峰县| 永善县| 吉木萨尔县|