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

  • Visual Basic學習手冊
  • 鞏建華 孫秀梅 安劍等編著
  • 222字
  • 2018-12-27 17:51:23

5章 熟悉數組與集合

(名師課堂:1小時21分)

數組是Visual Basic數據類型中比較特殊和比較重要的數據結構。在編程時,如果涉及數據不多,可以使用變量存取和處理數據,但對于成批的數據處理,就要用到數組。利用數組,可以簡化程序、提高編程效率。本章主要介紹靜態數組、動態數組及控件數組的相關知識及其應用。

通過學習本章,讀者可以達到以下學習目的:

了解一維數組;

了解二維數組;

掌握數組聲明;

掌握動態數組;

了解控件數組的創建;

了解控件數組的使用;

了解什么是集合及其應用。

5.1 認識數組

專題講座:光盤文件\MR\Video\5\數組的概念.exe

視頻速遞:詳細講解數組概念、數組分類和數組與簡單變量的區別

編程時,如果涉及數據不多,可以使用變量存取來處理數據,但對于成批的數據處理,就要用到數組。利用數組,可以簡化程序、提高編程效率。本節主要介紹數組的概念和數組與簡單變量的區別。

5.1.1 數組的概念

在程序設計中,為了處理方便,把具有相同類型的若干變量按有序的形式組織起來。這種具有相同數據類型數據的有序集合稱為數組。

由于有了數組,可以用相同的名字引用一系列的變量,并用數字(索引)來識別他們。使用數組可以縮短和簡化程序,因為可以利用索引值設計一個循環,高效處理多種情況。數組有上界和下界,數組元素在上界和下界內是連續的,因為Visual Basic對每個索引值都分配空間,所以不要聲明范圍過大的數組。

學習手冊

注意 這里討論的是程序中聲明的數組,它不同于控件數組,控件數組是在設計時,通過設置Index屬性實現的,變量數組總是連續的,與控件數組是不同的,不能從一個數組中加載或者卸載數組元素。

數組是一組相同數據類型變量的集合,并不是一種數據類型。通常把數組中的變量稱為數組元素,數組中每一個數組元素都有一個唯一的下標來標示自己,并且同一個數組中各個元素在內存中是連續存放的。在程序中使用數組名代表邏輯上相關的一些數據,用下標表示該數組中的各個元素,這使得程序書寫簡潔,操作方便,編寫出來的程序出錯率低,可讀性強。

編程技術:數組在內存中的分配狀況

數據的定義和一般的變量類似,在程序中如果定義了一個數組,當系統對源程序進行編譯時會分配一個連續的空間,這個空間的大小根據定義數組的大小進行分配。如定義一個有10個數組元素的整型數組,Dim A(10) As Integer。系統會給數組分配一個具有10個整型變量那么大的連續的存儲空間,數組的名字就是這一段連續內存空間的名字。這連續的存儲空間就像一個存儲數據的容器,用戶可以向里面存放整型數據。定義一個具有10個數組元素的整型數據的內存中的表現形式如圖5.1所示。

圖5.1 數組在內存中的分配狀況

『名詞解釋』

數組:數組可以看成是多個相同類型數據的組合,對這些數據的統一管理。數組中的元素可以是任何數據類型。

5.1.2 數組與簡單變量的區別

數組與簡單變量的聲明方法類似,但它們之間仍有區別:

◆ 數組是以基本數據類型為基礎,數組中每一個元素都屬于同一數據類型。

◆ 數組的定義類似于簡單變量的定義,所不同的是數組需要指定數組中的元素個數。

5.1.3 了解數組的分類

數組可以按照多種不同的方式進行分類,比如:數組的長度、數組的維數、數組類型、作用域和類型等。下面介紹這幾種分類方式的具體情況。

◆ 按數組的長度分類:靜態(定長)數組、動態(變長)數組。

◆ 按數組的維數分類:一維數組、二維數組、多維數組。

◆ 按數據類型分類:整型數組、字符串型數組、日期型數組等。

◆ 按作用域分類:模塊級數組、窗體級數組、過程級數組。

◆ 按類型分類:菜單對象數組、控件數組等。

5.2 掌握靜態數組的使用

專題講座:光盤文件\MR\Video\5\靜態數組.exe

視頻速遞:詳細講解靜態數組的使用

靜態數組是指程序在運行時,數組中包含的數組元素的個數不變,所占存儲空間也保持不變。靜態數組在聲明的時候,就已經確定了數組的大小。靜態數組根據其下標個數(即維數)的不同可分為一維數組、二維數組和多維數組。

5.2.1 聲明和使用一維數組

1.一維數組的聲明

一維數組是指只有一個下標的數組,對應于一個數字向量。

聲明一維數組的語法格式如下:

Public|Private|Dim數組名(<下標>)[As<類型>]

聲明一維數組語法中各部分的說明如表5.1所示。

表5.1 聲明一維數組語法中各部分的說明

例如,使用Dim語句聲明一維數組,代碼如下:

        Dim b(3)As String            '聲明靜態一維數組
        Dim c(5)                     '聲明默認Variant數據類型靜態一維數組

2.一維數組的調用

在調用一維數組前,所調用的數組最好是經過聲明的數組。下面通過實例,說明一維數組的調用方法。

實例位置:光盤文件\MR\ Instance\5\5.1

例5.1】 本實例使用選擇排序法,實現當單擊“排序”按鈕時,將一維數組a中各元素按從小到大的順序輸出。程序運行結果如圖5.2所示。

圖5.2 調用一維數組

程序代碼如下:

        Dim a(9)As Long     '    聲明靜態一維數組為整型
        Private Sub Form_Load()  ' 給數組a中各數組元素賦值
            a(0) = 564: a(1) = 78: a(2) = 45: a(3) = 456412
            a(4) = 456: a(5) = 1: a(6) = 45 + 79
            a(7) = 12: a(8) = 1 * 966: a(9) = 65 / 5
          Dim  i As Long
            For i=0 To 9
                '顯示數組a中各元素值
            Label1.Caption   =Label1.Caption&"a("&CStr(i+1)&")="&CStr(a(i))&""
            Next i
        End Sub
        Private Sub Command1_Click()
            Dim i As Long, l As Long, n As Long
            For i=0 To 9         '使用選擇排序法排序,每次選擇最小的數值
                For l = i To 9
              If     a(i)>a(l)Then
                      n = a(i)
                      a(i) = a(l)
                      a(l) = n
                  End If
                Next l
                Print a(i)         '打印輸出數組元素的值
            Next i
        End Sub

5.2.2 理解二維數組

1.二維數組的聲明

二維數組是指程序中擁有兩個下標的數組。可以把二維數組看做一個XY坐標軸,數組中的元素就是X軸與Y軸的交叉點。

例如,使用Dim語句聲明二維數組。代碼如下:

        Dim b(3,4)As String              '聲明靜態二維數組
        Dim c(5,9)                       '聲明默認Variant數據類型靜態二維數組

2.二維數組的調用

與一維數組一樣,在調用二維數組之前,最好對其進行聲明。下面通過實例說明二維數組的調用。

實例位置:光盤文件\MR\ Instance\5\5.2

例5.2】 本例實現單擊“賦值輸出”按鈕,為二維數組A中所有元素賦值,并將A中每個數組元素的值輸出。程序運行結果如圖5.3所示。

圖5.3 調用二維數組

程序代碼如下:

      Dima(1To9,1To9)    '   聲明靜態二維數組
      Private Sub Command1_Click()
          Dim  i As Long,l As Long
          For i = 1 To 9
                For l = 1 To 9
            a(i, l) = l
            '打印輸出二維數組元素值
            Print"a("&CStr(i)&","&CStr(l)&")="&CStr(a(i,l))&"  ";
                Next l
                Print
          Next i
      End Sub

5.2.3 定義多維數組

1.多維數組的聲明

數字矩陣中的各個元素要用行、列位置標示。例如,為了追蹤記錄計算機屏幕上的每一個像素,需要引用它的xy坐標。這時應該用多維數組存儲值。

聲明多維數組的形式如下:

        Dim<數組名>(下標1,下標2,…) As<數據類型>

其中下標的形式與一維數組中的下標相同,下標的個數決定了數組的維數。多維數組的大小為每一維大小的乘積,每一維大小為“上界?下界+1”。

例如,使用Dim語句聲明多維數組,程序代碼如下:

        Dim b(3,4,6,9)As Double   '   聲明靜態多維數組
        Dim c(5,9,8,1,3)             '聲明默認Variant數據類型靜態多維數組

2.多維數組的調用

多維數組在調用之前,最好對其進行聲明。下面通過實例說明多維數組的調用。

實例位置:光盤文件\MR\ Instance\5\5.3

例5.3】 本例實現的是通過For…Next循環使用Rnd隨機函數動態創建一個三維數組,并且將創建的三維數組顯示出來。程序運行結果如圖5.4所示。

圖5.4 調用多維數組

程序代碼如下:

        Private Sub Command1_Click()
            Me.Refresh
          D im arr(2,3,4)           '         聲明三維數組
            Dim i As Integer, j As Integer, z As Integer
            For z=0 To 4
                For j = 0 To 3
                  For i = 0 To 2
            arr(i      ,j,z)=Int(Rnd*10) ' 三維數組的賦值隨機產生
                  Next i
                Next j
            Next z
            For z=0 To 4
                For j = 0 To 3
                  For i = 0 To 2
                      '輸出三維數組
                      Print "arr" & "(" & i & "," & j & "," & z & ")=" & arr(i, j, z) & Space(4);
                  Next i
                Next j
                Print Tab
            Next z
        End Sub

5.2.4 了解數組中的數組

數組的元素可以是任意的數據類型,因此可以建立Variant數據類型數組。Variant數據類型元素可以是其他數組。

實例位置:光盤文件\MR\ Instance\5\5.4

例5.4】 建立兩個數組,一個包含整數,而另一個包含字符串。然后聲明第三個Variant數據類型數組,并將整數和字符串數組放置其中。

        Private Sub Command1_Click()
            Dim i As Integer       '                     聲明計數器變量。'聲明并放置整數數組
          Dim   intarray(5)As Integer                    '聲明數組
            For i=0 To 4                                 '循環體
            intarray   (i)=2205                          '設置元素值
            Next i
            '聲明并放置字符串數組。
          D im strarray(5)As String                       '聲明數組
            For i=0 To 4                                  '循環體
                strarray(i)="明日科技"                    '設置元素值
            Next i
            Dim arr(1 to 2)As Variant                     '聲明擁有兩個成員的新數組
            arr(1)=intarray()   '                         將其他數組移居到數組
          arr(2)  =strarray()
            MsgBox arr(1)(2)     '                        顯示結果“2205”
            MsgBox arr(2)(3)     '                        顯示結果“明日科技”
        End Sub

5.2.5 情景應用——制作幼兒識字卡片

許多年輕的父母越來越認識到幼兒早期智力開發的重要性。這里我們就利用數組設計一個幼兒識字卡片的程序。

實例位置:光盤文件\MR\ Instance\5\5.5

例5.5】 制作一個幼兒識字卡片,在窗體上利用Label控件顯示漢字,這里面漢字的數目和順序是固定的,將漢字都存儲在數組中,當用戶單擊按鈕時,會將這些漢字顯示在Label控件中,并顯示出來。

程序的設計過程如下:

1.窗體界面設計

新建一個標準的EXE工程。

在工程中默認創建一個窗體,使用該窗體的默認名,設置BorderStyle屬性為“0-None”,窗體無邊框,設置Picture屬性為設計好的圖片。

在窗體上添加一個Label控件,設置Caption屬性為空,Backstyle屬性為白色,BorderStyle屬性為“1-Fixed Single”,固定單邊框,ForeColor屬性為黑色。設置Font屬性,如圖5.5所示。

圖5.5 “字體”對話框

添加一個Timer控件,用于實現Label控件一定的效果。

在窗體上添加4個Image控件,并設置Picture屬性,分別用于執行“上一字”、“下一字”、“最小化”、“最大化”的功能。

2.程序代碼設計

首先定義窗體模塊級的數組變量:

            Dim MyArray(10)As String     '                       定義數組變量,存儲漢字
            Dim i As Integer     '                               定義整型變量,存儲數組序號

在窗體加載時,設置Timer控件不可用,并且給數組賦值,設置Label控件的顯示位置,設置索引值為-1,程序代碼如下:

        Private Sub Form_Load()
            Timer1.Enabled=False       '                        設置Timer控件不可用
            Timer1.Interval=100     '                           設置Interval屬性為100
            '給數組賦值
          My Array(0)="大":MyArray(1)="小":MyArray(2)="多":MyArray(3)="少"
          My Array(4)="上":MyArray(5)="中":MyArray(6)="下":MyArray(7)="左"
          My Array(8)="右":MyArray(9)="前":MyArray(10)="后"
            Label1.Left=-3800       '                           設置標簽控件的Left屬性
            i=-1                                                '設置索引值
            Image2_Click       '                                調用“下一字”按鈕
        End Sub

當用戶單擊“上一字”或“下一字”按鈕時,判斷索引值,如果是“上一字”按鈕,則將索引值減1,然后設置Label控件的位置,并設置Timer控件可用。如果是“下一字”按鈕,則將索引值加1,設置Label控件的位置,并設置Timer控件可用,程序代碼如下:

        Private Sub Image1_Click()    '                         上一字
            If i>0 Then     '                                   如果索引值大于0
                i=i-1                                           '索引值減1
            Label1   =MyArray(i)                                '將數組中的值顯示在標簽中
            End If
            Timer1.Enabled=True     '                           設置Timer控件可用
            Label1.Left=-4000       '                           設置Label控件的Left屬性位置
        End Sub
        Private Sub Image2_Click()    '                         下一字
            If i<10 Then       '                                如果索引值小于10
                i=i+1                                           '索引值加1
            Label1   =MyArray(i)                                '設置標簽中的文字
            End If
            Timer1.Enabled=True     '                           設置Timer控件可用
            Label1.Left=-4000       '                           設置Label控件的Left屬性位置
        End Sub

Timer控件的Timer事件用于處理標簽控件從左側向右側的移動效果,當移動到大約窗體中間的位置,則停止移動,程序代碼如下:

        Private Sub Timer1_Timer()
            If Label1.Left<5000 Then     '                       如果標簽的Left屬性小于5000
            Label1.Left   =Label1.Left+200                       '設置Label控件向右移動
            Else                                                 '否則
            Label1.Left   =-4000                                 '設置Label控件顯示在最左側
            End If
            '如果Label控件的Label屬性在1560和1660中間時
            If Label1.Left > 1560 And Label1.Left < 1660 Then
            T   imer1.Enabled=False                              '設置Timer控件不可用
            End If
        End Sub

運行效果如圖5.6所示。

圖5.6 幼兒識字卡片

5.3 熟悉動態數組的使用

專題講座:光盤文件\MR\Video\5\動態數組.exe

視頻速遞:詳細講解動態數組的聲明和調用

動態數組是指在程序運行時,可以增加或減少其數組元素個數的數組,從而其存儲空間也會根據需求變大或變小。

5.3.1 聲明動態數組

動態數組使用ReDim語句聲明。

語法:

        ReDim[Preserve] 數組名(下標)[As數據類型]

聲明動態數組語法中各部分的說明如表5.2所示。

表5.2 聲明動態數組語法中各部分描述

學習手冊

說明 ReDim語句是在過程級別中使用的語句,它可以多次被使用,以改變數組的維數和大小。

學習手冊

注意 定長數組聲明中的下標是常量,而動態數組下標是常量也可以是定值的變量。

例如,在程序中聲明動態數組a(10),程序代碼如下:

        ReDim a(10) As Long

學習手冊

注意 動態數組只能改變其數組元素的多少,從而改變所占內存大小,不能改變其已經定義的數據類型。

動態數組還可以使用Dim語句聲明。在使用Dim語句聲明動態數組時,將數組下標定義為空(沒有數組),并在需要改變這個數組大小時,使用ReDim語句重新聲明這個數組的下標。

5.3.2 調用動態數組

實例位置:光盤文件\MR\ Instance\5\5.6

例5.6】 前面介紹了動態數組的聲明,下面通過一個例子講解如何調用動態數組。當運行程序后,單擊“輸入”按鈕,使用InPutBox函數彈出“輸入”對話框,輸入一些數據儲存在動態數組A中,并將動態數組A中的數據在TextBox控件中顯示出來。程序運行結果如圖5.7所示。

圖5.7 調用動態數組

程序代碼如下:

        Private Sub Command1_Click()
            Text1.Text = ""
            Dim S As Long, i As Long
            Dim A()
            Do
                ReDim Preserve A(S)                                   '動態定義數組
            A(S)   =InputBox("請輸入字符串,輸入空串時結束","輸入")   '對話框輸入數組元素
                S = S + 1
            Loop Until A(S -1) = ""
            For i=0 To S-2
                Text1.Text = Text1.Text & "第" & CStr(i + 1) & "個是:" & CStr(A(i)) & " "
            Next i
            Erase A                                            '重新初始化數組的元素
        End Sub

學習手冊

注意 ① Dim語句是不執行的,可以放在過程體的外部,ReDim語句是可執行的,必須放在過程體內部。

② ReDim語句可以反復使用,以改變數組的維數和元素個數,但不能改變數組類型。

③ 在第二次使用ReDim語句時將對數組重新初始化:若為數值型數組,各元素都變成0,若為字符型數組,各元素都變成長度為0的字符串;Variant型則變為Empty。

④ ReDim語句可直接定義數組。

5.4 熟練運用數組的基本操作

專題講座:光盤文件\MR\Video\5\數組的基本操作.exe

視頻速遞:詳細講解數組的一些基本操作

數組進行聲明之后就可以使用了,本節主要介紹數據的一些基本操作。

5.4.1 對數組元素進行初始化

對數組元素進行初始化是指給數組元素賦值,可以使用給變量賦值的方法為數組元素賦值。

例如,在數組元素較少的情況下可以像變量一樣為數組賦值。代碼如下:

        Dim A(1 To 3) As String
        A(1) = "明日科技"
        A(2) = "www.mingrisoft.com"
        A(3)="Visual Basic技術從入門到精通"

也可以使用Visual Basic所提供的函數為數組元素賦值,如Array函數。在數組元素較多的情況下,可以使用循環結構語句為數組中每個元素賦值。

例如,利用嵌套循環結構為二維數組中每個元素賦值。代碼如下:

        Dim A(1 To 9, 1 To 9)
        Dim i As Long, l As Long
        For i = 1 To 9
            For l=1 To 9
                A(i,l)=0    '遍歷二維數組中每個元素,并將其賦值為0
            Next l
        Next i

學習手冊

說明 可以在循環中使用InputBox函數與用戶交互為數組賦值。

5.4.2 訪問數組中的元素

數組的輸出是指將數組元素輸出。數組的輸出與訪問變量類似,其方法也大致相同。

例如,將String型數據類型數組A中的元素輸出,程序代碼如下:

        Dim A(1 To 3) As String
        A(1) = "明日科技"
        A(2) = "www.mingrisoft.com"
        A(3)="Visual Basic技術從入門到精通"
        Print A(1),A(2),A(3)   '   輸出數組元素值

數組的輸出與輸入類似,對于數組元素較多的數組,也可以使用循環語句結構將數組中的元素輸出。多維數組也可以采用嵌套循環結構將數組元素輸出。

5.4.3 向數組中插入元素

數組的插入是指將相同數據類型的元素插入到數組的指定位置。如圖5.8、圖5.9所示的是向數組插入元素前與插入元素后的效果。

圖5.8 插入數組元素前

圖5.9 插入數組元素后

對數組進行插入操作時,數組的大小會被改變,所以插入操作只能針對動態數組進行。

實例位置:光盤文件\MR\ Instance\5\5.7

例5.7】 本例實現的是向數組A中的指定位置插入一個新數值6,并將插入后的數組A中的各數組元素輸出到窗口中。結果如圖5.10所示。

圖5.10 數組的插入

程序代碼如下:

        Dim A() As Long
        Private Sub Command2_Click()
          ReDim  Preserve A(1 To 4)
            A(1)=1:A(2)=2:A(3)=3:A(4)=4                  '為動態數組A中元素賦值
            Dim n As Long: n = 6
          ReDim  Preserve A(1 To 5)
            Dim i As Long, m As Long
            For i=2 To 5                                  '插入新數值
                m = A(i)
                A(i) = n
                n = m
            Next i
            For i=1 To 5
            Debug.Print   "a("&CStr(i)&")="&CStr(A(i)),  '輸出數組A中的元素
            Next i
        End Sub

5.4.4 刪除數組中的元素

數組的刪除是指刪除數組中一個或多個元素。如圖5.11、圖5.12所示的是從數組中刪除一個數組元素的前后情況。

圖5.11 刪除數組元素之前

圖5.12 刪除數組元素之后

實例位置:光盤文件\MR\ Instance\5\5.8

例5.8】 本例實現的是從數組A中刪除一個數組元素,并將刪除后數組A中的各數組元素輸出到窗口中。結果如圖5.13所示。

圖5.13 數組的刪除

程序代碼如下:

        Private Sub Command2_Click()
            ReDim A(1 To 4) As Long
            A(1)=1:A(2)=2:A(3)=3:A(4)=4            '為動態數組A中元素賦值
          Dim  i As Long
            For i=2 To 3
                A(i) = A(i + 1)
            Next i
          ReDim  Preserve A(1 To 3)
            For i=1 To 3
            Pri   nt"a("&CStr(i)&")="&CStr(A(i)),       '輸出刪除后數組A中的元素值
            Next i
        End Sub

5.4.5 查找數組中的元素

數組的查找是指查找數組中指定的一個數組元素。可以使用循環語句結構對數組元素進行順序查找,即遍歷數組中每一個元素,查看數組中每一個數組元素是否與所要查找的數據相符,將符合的數組元素輸出。

實例位置:光盤文件\MR\ Instance\5\5.9

例5.9】 本例實現的是使用For…Next語句,從包含0~9數組元素的Long型數據類型數組A中,查找一個值等于16的數組元素。結果如圖5.14所示。

圖5.14 數組的查找

程序代碼如下:

        For i = 0 To 9
          If  A(i)=16 Then
                MsgBox "查找值等于16的數組元素保存在a(" & CStr(i) & "中。", vbOKOnly, "提示"
                Exit For
            End If
        Next i

對于數組元素取值有序(由小到大或由大到小等)的數組,可以采用二分法查找數組元素。二分法為:將所要查詢的數值,先與位于數組中間的數組元素進行比較,根據比較結果再對前一半或后一半進行查找,然后繼續取前一半或后一半中間的數組元素與查詢的數值進行比較,循環比較,直到查詢到符合條件的結果為止。

學習手冊

注意 二分法只適用于有序數組。

5.5 學習運用與數組相關的函數及語句

專題講座:光盤文件\MR\Video\5\與數組相關的函數及語句.exe

視頻速遞:詳細講解Array函數、Ubound函數、Lbound函數等

Visual Basic提供了一些針對數組的函數及語句,方便用戶對數組進行各種操作。

5.5.1 利用Array函數給數組賦值

Array函數可以創建一個數組,并返回一個Variant數據類型的變量。

語法:

        Array(arglist)

參數說明:

arglist:一個數值表,各數值之間用“,”分開。這些數值是用來給數組元素賦值的。當arglist中沒有任何參數時,則創建一個長度為0的數組。

例如,將一個Variant型變量,使用Array函數賦值成Variant型數組,代碼如下:

        Dim A As Variant
        A=Array(45,2,6,7)   'A中包含4個數組元素,各元素的值為:45,2,6,7

學習手冊

注意 數組A中第一個元素是A(0)。使用Array函數創建的數組只能是Variant數據類型,返回的變量也只能是Variant型,如果這個變量不是Variant型,Visual Basic將產生類型不匹配的錯誤。

5.5.2 利用UBound和LBound函數獲得數組下標

UBound函數可以返回指定數組中的指定維數可用的最大下標。其返回值為Long型。而LBound函數與UBound函數相反,該函數可以返回指定數組中的指定維數可用的最小下標。其值為Long型。

語法:

        UBound(<數組>[,<維數>])
        LBound(<數組>[,<維數>])

參數說明:

數組:必需的。數組的名稱,遵循標準的變量命名約定。

維數:可選的。用來指定返回哪一維,默認值是1(第一維)。UBound函數返回指定維的上界;LBound函數返回指定維的下界。

例如,對一個定義好的三維數組,分別使用UBound函數和LBound函數取其中各個維數的上界與下界。UBound函數與LBound函數對三維數組A的取值結果如表5.3所示。

表5.3 UBound函數和LBound函數的取值結果

定義三維數組的代碼如下:

        Dim A(1 To 100, 4, -3 To 2) As Long

5.5.3 利用Split函數創建數組

Split函數返回一個下標從零開始的一維數組,一維數組中包含了指定數目的子字符串。

語法:

        Split(<表達式>[, <字符>[, count[, compare]]])

Split函數語法中各部分的說明如表5.4所示。

表5.4 Split函數語法中各部分的說明

compare參數的設置值如表5.5所示。

表5.5 compare參數的設置值

例如,使用Split函數將明日公司網址www.mingrisoft.com按“.”劃分到字符串數組中。程序代碼如下:

        Dim A
        Private Sub Form_Load()
          A  =Split("www.mingrisoft.com",".",-1,1)    '返回一個下標從零開始的一維數組
        End Sub
        Private Sub Command1_Click()
          Dim  i As Long
            For i=0 To 2
                Print"A("&i+1&")="&A(i)                '打印輸出數組元素值
            Next i
        End Sub

輸出的結果值為:

        A(1)=www
        A(2)=mingrisoft
        A(3)=com

5.5.4 利用Option Base語句定義數組下標

Option Base語句用來指定聲明數組時下標下界省略時的默認值。該語句是在模塊中使用的語句。一個模塊中只能出現一次,該語句必須寫在模塊的所有過程之前,而且必須位于帶維數的數組聲明之前。只對該語句所在模塊中的數組下界有影響。

語法:

        Option Base [0 | 1]

參數說明:

[0 | 1]:設置數組下標中下界省略時的默認值。一般情況下數組的下標下界省略時的默認值為0。

例如,在聲明數組之前使用Option Base語句將下標中默認值設置為1后,聲明數組A,代碼如下:

        Option Base 1
        Dim A(4) As Long

數組A中的元素分別為:A(1),A(2),A(3),A(4)。

5.6 認識控件數組

專題講座:光盤文件\MR\Video\5\控件數組.exe

視頻速遞:詳細講解控件數組的概念、聲明和調用

在程序設計中,通常將類型相同、功能相似的控件視為一個數組。這就是本節將介紹的控件數組。

5.6.1 了解控件數組的概念

控件數組是一組相同類型的控件,使用相同名稱,并共享同一過程的集合。這個控件集合中的每一個控件,都是該控件數組中的數組元素。

在創建控件數組時,系統會給這個控件數組中每一個控件唯一的索引(Index),即下標。這個索引的作用是用來區分控件數組中不同的控件。

5.6.2 聲明控件數組

聲明控件數組常使用的方法有復制粘貼法和設置控件的Name屬性兩種方法,下面分別進行簡單的介紹。

1.復制粘貼法

通過復制粘貼控件創建控件數組,具體步驟如下。

在窗體上添加一個要創建控件數組的控件。

選中該控件,單擊鼠標右鍵,在彈出的菜單中選擇“復制”命令。

使用鼠標選中窗體,單擊鼠標右鍵,在彈出的菜單中選擇“粘貼”命令。此時會彈出一個如圖5.15所示的提示對話框。單擊“是”按鈕后,則在窗體上添加了一個新的控件數組元素。

圖5.15 創建控件數組時彈出的對話框

重復執行步驟3,直到添加完所需要的控件數組元素為止。

學習手冊

注意 要在容器類型控件內創建控件數組,需要選中容器控件,如Frame(框架)控件等,執行“粘貼”命令。

2.設置控件Name(名稱)屬性

控件的Name屬性用在代碼中用來標識控件的名字。通過將同類型控件(名稱)屬性設置為相同名稱,也可以聲明控件數組。創建的步驟如下。

向窗體或容器控件中添加兩個或多個同類型控件。

逐一選中添加的每個控件,在屬性窗口中設置這些控件的(名稱)屬性并與第一個控件的名稱一致,即可完成創建控件數組的過程。在第一次出現(名稱)屬性同名時,也會出現如圖5.15所示的提示對話框。單擊“是”按鈕即可創建控件數組。

5.6.3 調用控件數組

下面通過實例說明控件數組的調用方法。

實例位置:光盤文件\MR\ Instance\5\5.10

例5.10】 本例實現在單擊CommandButton控件數組中的按鈕時,通過Index(索引)屬性判斷單擊的是哪個按鈕。程序代碼如下:

        Private Sub Command1_Click(Index As Integer)
          Select  Case Index
            Case 0
                MsgBox "你單擊的是‘確定’按鈕", vbOKOnly, "明日圖書"
            Case 1
                MsgBox "你單擊的是‘取消’按鈕", vbOKOnly, "明日圖書"
            End Select
        End Sub

5.6.4 情景應用——利用控件數組設置控件狀態

開發程序時,響應不同的事件有時需要設置一組控件的不同狀態。這里可以利用控件數組來實現,下面通過一個實例講解如何實現利用控件數組設置控件狀態。

實例位置:光盤文件\MR\ Instance\5\5.11

例5.11】 創建一個Visual Basic工程,在窗體上添加一組Label控件數組,當鼠標劃過每一個Label控件的時候,將其字體顏色顯示為紅色。程序的設計過程如下。

新建一個標準工程。

在工程中添加一個窗體,窗體的名稱使用其默認名稱,Caption屬性設置為“利用控件數組設置控件狀態”,StartUpPosition屬性設置為“2-屏幕中心”。

在窗體上添加一個Label控件數組,Caption屬性均設置為“明日科技”,并設置Font屬性。

程序的主要代碼如下。

        Private Sub Label1_MouseMove(Index As Integer,Butt on As Integer,Shift As Integer,X As Sing le,Y
    As Single)
          Dim  mouseover As Boolean
            mouseover = (0 <= X) And (X <= Label1(Index).Width)
          If  mouseover Then
            For   i=0 To Label1.Count-1
              Label1(i).ForeColor     =&H0&
                Next i
            Label1(Index   ).ForeColor=&HFF&
            End If
        End Sub

程序的運行結果如圖5.16所示。

圖5.16 利用控件數組設置控件狀態

5.7 了解集合的使用

專題講座:光盤文件\MR\Video\5\集合.exe

視頻速遞:詳細講解集合的概念和應用

本節主要講解集合的概念和集合的應用。讓大家對集合的知識有所了解。

5.7.1 集合的概念

集合就是在Visual Basic中把相關的對象進行分組的一種方法。它是Visual Basic提供的一種特殊的數據結構,因此集合具有自己的屬性和方法。集合還可以通過一個關鍵字來訪問其集合元素。聲明集合對象也可以用Dim語句。例如聲明一個集合A元素,代碼如下:

        Dim A As New Collection

定義一個集合之后,就可以利用集合屬性和方法進行操作與訪問。集合中的對象提供了Add方法、Remove方法、Item方法和Count屬性。

◆ Add方法:添加集合對象。

◆ Remove方法:刪除集合對象。

◆ Item方法:引用集合對象元素。

◆ Count屬性:返回集合元素個數。

5.7.2 數據集合對象的應用

實例位置:光盤文件\MR\ Instance\5\5.12

例5.12】 本例首先要創建一個集合實體,并利用其Add方法將指定對象加入到集合中。然后對集合中的對象進行操作。例如,將所有的TextBox控件加入到集合中。將集合中所有的TextBox控件的Text屬性賦值為“mingrisoft”,單擊“確定”按鈕,顯示結果如圖5.17所示。

圖5.17 數據集合對象的應用

程序代碼如下:

        Dim aaa As Collection
        Private Sub Form_Load()
          Set   aaa=New Collection
          Dim   tex As Control
          For   Each tex In Me.Controls
            If   TypeName(tex)="TextBox"Then        '判斷對象類型是否為TextBox
              aaa.Add     tex,tex.Name              '將所有TextBox控件加入到集合
                End If
            Next tex
        End Sub
        Private Sub Command1_Click()
          Dim   item As Control
          For   Each item In aaa
                item.Text="mingrisoft"              '對集合中所有的TextBox控件的Text屬性賦值
            Next item
        End Sub

5.8 實戰練習

5.8.1 利用數組隨機抽取幸運觀眾

難度系數:★★★★

題目描述

在電視節目中,經常需要隨機抽取幸運觀眾。如果觀眾抽取的范圍較小,可以使用數組實現。下面介紹實現的方法:首先將所有觀眾的姓名生成數組,然后獲得總的數組元素,在數組元素中隨機抽取元素的下標,根據抽取的下標獲得幸運觀眾。結果如圖5.18所示。

圖5.18 利用數組隨機抽取幸運觀眾

技術指導

本例的實現主要用到了Split函數、Ubound函數、Int函數和Rnd函數等方面的知識。

緊急救援

如果您在做本例題的過程中遇到困難或疑惑,可以按照下面救援通道提供的網址獲取本例題的源碼和技術文檔。

救援通道:http://www.mrbccd.com/VisualBasic/loveVisualBasic/5.8.1

5.8.2 利用數組實現矩陣轉換

難度系數:★★★★

題目描述

在對數據進行分析時,有時需要對列與行進行轉換(即矩陣轉換),從而更清晰地分析數據。利用數組可以輕松實現矩陣轉換。本練習嘗試開發一個程序,思路是將數組中的行和列對換,實現效果如圖5.19所示。

圖5.19 矩陣轉換

技術指導

本例主要是通過使用二維數組來實現的。二維數組是指程序中擁有兩個下標的數組。可以把二維數組看做是一個XY坐標系中的點。

緊急救援

如果您在做本例題的過程中遇到困難或疑惑,可以按照下面救援通道提供的網址獲取本例題的源碼和技術文檔。

救援通道:http://www.mrbccd.com/VisualBasic/loveVisualBasic/5.8.2

5.8.3 使用Split函數分隔明日公司網址

難度系數:★★★★

題目描述

本例主要實現了使用Split函數分隔明日公司網址的功能,以“.”作為分隔單位,使用Split函數將明日公司網址www.mingrisoft.com返回為字符串數組。將網址分隔后將值賦給數組并顯示出來。程序的運行效果如圖5.20所示。

圖5.20 使用Split函數分隔明日公司網址

技術指導

本例的實現主要是通過使用Split函數來實現的。Split函數返回一個下標從零開始的一維數組,一維數組中包含了指定數目的子字符串。語法如下:

        Split(<表達式>[, <字符>[, count[, compare]]])

Split函數語法中各部分的說明如表5.6所示。

表5.6 Split函數語法中各部分的說明

緊急救援

如果您在做本例題的過程中遇到困難或疑惑,可以按照下面救援通道提供的網址獲取本例題的源碼和技術文檔。

救援通道:http://www.mrbccd.com/VisualBasic/loveVisualBasic/5.8.3

5.9 本章小結

本章主要對數組進行詳細的介紹,分別對靜態數組、動態數組和控件數組進行講解,最后,向讀者介紹集合的概念及應用,使讀者對集合有一個基本的了解。恰當合理地運用數組,會大大提高程序的運行效率,提高程序設計的質量。

主站蜘蛛池模板: 财经| 嘉义县| 固阳县| 容城县| 温宿县| 临汾市| 托克托县| 泌阳县| 墨竹工卡县| 怀安县| 锡林浩特市| 揭阳市| 始兴县| 溆浦县| 东台市| 太仓市| 长丰县| 古交市| 英吉沙县| 秦安县| 佛坪县| 神池县| 双流县| 蒙城县| 东乌珠穆沁旗| 松滋市| 奈曼旗| 宝丰县| 准格尔旗| 恩平市| 历史| 吉安市| 三原县| 佳木斯市| 清徐县| 无棣县| 大竹县| 中阳县| 青州市| 石阡县| 牡丹江市|