VB6如何使用控制元件陣列?

並不是只有變數能集合起來組成變數陣列,就連控制元件也可以集合起來構成控制元件陣列。和變數陣列不同的是控制元件陣列不需要使用Dim敘述來宣告,而是從佈置元件的時候就開始設定。

如何讓一個控制元件變成控制元件陣列?

要讓控制元件變成控制元件不難,無需使用到任何程式碼,只要會複製貼上即可。舉個例子,如下圖,表單中有一個Command1元件。
sshot-1
1.我們若要把Command1元件變成Command1元件陣列的話,要先將Command1元件複製下來。
sshot-2
2.接著再在表單直接貼上。
sshot-3
3.然後會出現對話方塊「已經有一個名為”Command1″的控制項,您是否想要建立一個控制項陣列?」,按下「是」,確定建立控制元件陣列。
sshot-4
4.接著表單會多出一個一模一樣的Command1,就連Name屬性也跟前面那個一樣都是Command1,只不過……好像多了括號!?對,沒錯,括號內就是Command1陣列的號碼,就跟變數陣列一樣,每個括號都是獨立的個體,誰都不會影響誰。
sshot-6
sshot-5
5.如果你還想再建立多一點的陣列,可以持續複製貼上。
sshot-7
sshot-8

定格動畫實作

學會了控制元件陣列的建立後,我們就來利用它來做個簡單的定格動畫吧!設計一個程式,表單(Form1)背景會隨著Command1的點擊來做不同的圖片(Image1控制元件陣列)切換。

在這裡要來補充兩個東西,Image1控制元件陣列若要單個元件使用,則要加上括號,例如Image1(0)。如果沒有加括號,則視為整個控制元件陣列的屬性,Count屬性為控制元件陣列的數量。

以下為程式碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
'請自行建立Image1控制項陣列,並自行載入圖片
Dim Index As Integer 'Index儲存Command1已按下的次數,為Image1的陣列號碼
 
Private Sub Command1_Click() '按下Command1時
    Form1.Picture = Image1(Index).Picture '讓表單背景等於Image1(Index)的背景
    Index = Index + 1 'Index+1 表示又按下一次Command
    If Index >= Image1.Count Then Index = 0 '當Index大於等於陣列數量時(Image1.Count),回到Image1(0),即Index=0,做動畫循環
End Sub
 
Private Sub Form_Load() '表單剛載入時
    Dim I As Integer 'I為For的計次變數
    For I = 0 To Image1.Count - 1 'Image1控制項陣列範圍為0~Image1.Count - 1
        Image1(I).Visible = False '將所有Image1陣列都設定為不顯示
    Next I
End Sub

連續動畫實作

只要將剛才定格動畫的Command1改成Timer1,即可達成此效果。程式便會自己以固定的時間間隔更換圖片。

以下為程式碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
'請自行建立Image1控制項陣列,並自行載入圖片
Dim Index As Integer 'Index儲存Command1已按下的次數,為Image1的陣列號碼
 
Private Sub Form_Load() '表單剛載入時
    Dim I As Integer 'I為For的計次變數
    For I = 0 To Image1.Count - 1 'Image1控制項陣列範圍為0~Image1.Count - 1
        Image1(I).Visible = False '將所有Image1陣列都設定為不顯示
    Next I
    Timer1.Interval = 100 '讓動畫100豪秒動一次
End Sub
 
Private Sub Timer1_Timer()
    Form1.Picture = Image1(Index).Picture '讓表單背景等於Image1(Index)的背景
    Index = Index + 1 'Index+1 表示又按下一次Command
    If Index >= Image1.Count Then Index = 0 '當Index大於等於陣列數量時(Image1.Count),回到Image1(0),即Index=0,做動畫循環
End Sub

Command控制元件陣列將不同按鈕的Click事件寫在一起

有時候我們要製作許多按鈕,或許你可能會把這些按鈕分別獨立成Command1、

Command2、Command3、Command4……如此一來便要個別去撰寫該Command的程式碼,這樣會使程式碼過於冗長,不易閱讀。既然元件可以開陣列,何不就來開個陣列呢?當我們開完陣列時,滑鼠雙擊陣列元件兩下,會發現跳出來的程式碼(Click事件程序)會跟不是陣列的時候不太一樣。好像多了「(Index As Integer)」!?
sshot-9
Index As Integer是在宣告什麼?其實就是在宣告使用者點擊的陣列物件是哪個號碼,會以整數型態存入Index中。如此一來,我們便能利用Select Case,在一個事件程序內,寫完所有各個陣列要做的動作了!

程式碼如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Command1_Click(Index As Integer)
    MsgBox "您現在點擊的是" & Index & "號Command1。"
    Select Case Index '拿Index為Case的資料
        Case 0 '當點擊Command1(0)時
            Print "123"
        Case 1 '當點擊Command1(1)時
            Print "678"
        Case 2 '當點擊Command1(2)時
            Print "pcnoproblem"
        Case Else '當點擊其他的Command1控制元件陣列時
            Print "else"
    End Select
End Sub

控制元件陣列其實也是必學且常用到的項目,熟練後絕對可以有效減少程式碼的長度,而且易於修改與維護。通常會將其與迴圈合用,讓電腦自己自動執行類似的敘述,進而快速的控制到多個元件。

文章分類:VB6.0|標籤:, , ,

迴響已關閉