VB考試教程:使用對象集合

字號:

五、使用對象集合
    集合是一組相關(guān)的對象。
    窗體上的對象都被存放于同一文件之中。而且VisualBasic將這些對象視為同一組的成員。在Visual Basic術(shù)語中,窗體上的整組對象被稱為Controls(控件)集合。Controls(控件)集合是在你打開新窗體和為窗體添加對象而擴(kuò)展它時(shí)自動(dòng)創(chuàng)建的。每個(gè)窗體都有一個(gè)Controls(控件)集合。事實(shí)上,Visual Basic擁有好幾個(gè)標(biāo)準(zhǔn)的對象集合供你在編寫程序時(shí)使用。在這里,我們將學(xué)習(xí)在使用任何集合時(shí)所需的基本技巧。
    1、集合標(biāo)記法
    程序中的每個(gè)集合都具有自己的名稱,這樣你就可以在程序代碼中作為一個(gè)獨(dú)立單元引用這些集合。例如,包含窗體上的所有對象的集合被稱為Controls(控件)集合。
    因?yàn)樵诔绦蛑锌赡苡卸鄠€(gè)窗體,因而有多個(gè)Controls(控件)集合,這樣,當(dāng)在一個(gè)包含多個(gè)窗體的程序中使用Controls(控件)集合時(shí),需要加上窗體的名字。例如,要引用Form1(窗體1)上的Controls(控件)集合,應(yīng)該在代碼中使用如下名稱:
     Form1.Controls
    在該標(biāo)記法中,F(xiàn)orm1對象名和Controls(控件)關(guān)鍵字之間的句點(diǎn)使Controls(控件)看上去好象是一種屬性,但是Visual Basic程序員將Controls(控件)集合描述為包含在Form1對象中的一個(gè)對象。這兩種對象之間的關(guān)系或者說等級有點(diǎn)兒象路徑名中的文件夾,這在后面開始使用應(yīng)用對象時(shí),將再次看到這種標(biāo)記法。
    除了在程序中可以使用對象和集合以外,Visual Basic還允許你瀏覽你的系統(tǒng),尋找其它應(yīng)用對象并在程序中加以運(yùn)用。我們將在學(xué)習(xí)如何使用Visual Basic Object Browser(對象瀏覽器)時(shí)再次探討這個(gè)問題。
    2、引用集合中的對象
    你可以單獨(dú)或成組地引用集合中的對象。
    (1)單獨(dú)引用集合中的對象
    引用集合中的對象,或者說引用集合中的個(gè)別成員有兩種方法:
    第一種方法就是通過直接在賦值語句中使用對象名來加以引用。例如,語句:
     Form1.Controls!Label1.Caption = "Employees"
    單獨(dú)列出了Controls(控件)集合中的Label1對象,并將其標(biāo)題屬性設(shè)置為“Employees”。驚嘆號(?。┯脕磉B接Label1對象和Controls(控件)集合。盡管該語句對編譯程序來說可能有點(diǎn)兒冗長拗口了,但它卻準(zhǔn)確地反映出集合中的層次。
    第二種處理集合中對象的方法是指定該對象在對象組中的索引位置。VisualBasic按照對象創(chuàng)建的逆向順序存儲集合對象,因此你可以使用對象的“創(chuàng)建順序”單獨(dú)引用該對象,或者使用循環(huán)來檢查數(shù)個(gè)對象。例如,要想識別窗體中最后創(chuàng)建的對象,你可以指定下標(biāo)0,比如下面的示例:
     Form1.Controls(0).Caption = "Business"
    該語句將窗體中最后一個(gè)對象的Caption(標(biāo)題)屬性設(shè)置為“Business”(倒數(shù)第二創(chuàng)建的對象下標(biāo)為1,倒數(shù)第三創(chuàng)建的對象下標(biāo)為2,等等。)
    (2)成組地引用集合中的對象
    這一點(diǎn)將在下面介紹。
    3、編寫For Each...Next循環(huán)
    For Each...Next循環(huán)設(shè)計(jì)用來處理集合。
    使用集合優(yōu)點(diǎn)是可以有效地處理對象組。盡管你能夠引用集合中的單個(gè)成員,但是使用集合中對象的最有用方法是將它們作為一組來處理。例如,你可以同時(shí)對整個(gè)對象集合進(jìn)行顯示、移動(dòng)、排序、重命名或調(diào)整大小等等操作。
    要處理這些任務(wù),可以使用For Each...Next的循環(huán)逐個(gè)處理集合中的所有對象。For Each...Next循環(huán)與For...Next循環(huán)十分相似。當(dāng)For Each...Next循環(huán)被用于控制集合時(shí),它的語法如下:
     For Each Control in FormName.Controls
     process object
     Next Control
    其中:
    Control是代表集合中當(dāng)前對象的特殊變量,是對象型變量;
    FormName是窗體名稱,如Form1、Form2等;
    循環(huán)體用于處理集合中的各個(gè)對象。例如,你可以修改集合中這些對象的Enabled、Left、Top、Caption或者Visible等屬性,當(dāng)然也可以在列表框中列出每個(gè)對象的名稱。
    例如,要同時(shí)移動(dòng)窗體上的所有控件,見下面介紹。
    4、移動(dòng)一組對象
    例:使用Controls(控件)集合同時(shí)將一組對象從窗體的左側(cè)移動(dòng)到右側(cè)。
    該程序使用For Each...Next循環(huán)在用戶每次單擊“Command1”按鈕時(shí)移動(dòng)對象。
    在窗體上添加幾個(gè)控件,其中包含Command1命令按鈕,鍵入如下代碼:
     Option Explicit
     Dim Ctrl As Object
     Private Sub Command1_Click()
     For Each Ctrl In Controls
     Ctrl.Left = Ctrl.Left + 200
     Next Ctrl
     End Sub
    說明:使用For Each...Next循環(huán)來調(diào)整每個(gè)對象的Left屬性,這樣它們就能夠成組地移動(dòng)。
    用戶每次單擊“Command1”按鈕時(shí),該For Each...Next循環(huán)都會(huì)逐個(gè)檢查Controls(控件)集合中的對象,并將它們向右移動(dòng)200 twip(要向左移動(dòng)200 twip應(yīng)減去200)。Ctrl變量是集合中當(dāng)前對象的“替身”,它的屬性值與它所代表的對象的屬性值相同。在該循環(huán)中,對Left屬性值的調(diào)整控制了對象相對于窗體左部的位置。