在同一窗體上放置兩個(gè)命令按鈕時(shí),它們是兩個(gè)具有不同 name 屬性設(shè)置值(command1 和 command2)的分開(kāi)的對(duì)象,但都分享同一個(gè)類— 命令按鈕。
它們也共享這樣一個(gè)特征,即它們?cè)谕淮绑w上。在本章前面已看到,窗體上的控件也包含在窗體中。這就把控件放在一個(gè)層次上。要引用控件就必須先引用窗體,就如同打電話撥號(hào)一樣,首先要撥國(guó)家/地區(qū)號(hào)碼或區(qū)域號(hào)碼,然后再撥具體的電話號(hào)碼。
這兩個(gè)命令按鈕也共享這樣一個(gè)特征,即它們都是控件。所有控件都具有公共特性,使它們不同于窗體以及 visual basic 環(huán)境中的其它對(duì)象。以下章節(jié)中將說(shuō)明 visual basic 如何用集合使相關(guān)的對(duì)象分組。
對(duì)象的層次
對(duì)象層次提供了一種組織結(jié)構(gòu),它決定了對(duì)象間的相互關(guān)系以及訪問(wèn)它們的方法。在大多數(shù)情況下不必考慮 visual basic 對(duì)象的層次。但是:
在操作其它應(yīng)用程序的對(duì)象時(shí),應(yīng)當(dāng)熟悉那個(gè)應(yīng)用程序的對(duì)象層次。關(guān)于定位對(duì)象層次的信息,請(qǐng)參閱“用部件編程”。
在使用數(shù)據(jù)訪問(wèn)對(duì)象時(shí),應(yīng)當(dāng)熟悉數(shù)據(jù)訪問(wèn)對(duì)象層次。就象在 professional features 一書上的《數(shù)據(jù)訪問(wèn)對(duì)象指南》部分描述的那樣,該書包括在 visual basic 的專業(yè)版和企業(yè)版中。
在 visual basic 中,一個(gè)對(duì)象包含其它對(duì)象的一般情況時(shí)有發(fā)生。 下面我們要詳細(xì)討論。
使用對(duì)象集合
集合對(duì)象有自己的屬性和方法。對(duì)象集合中的對(duì)象作為集合的成員被引用。集合中的每個(gè)成員從 0 開(kāi)始順次編號(hào);這就是成員的索引號(hào)。例如,控件集合包含已給定窗體上的所有控件 。如果對(duì)集合中的所有對(duì)象都必須執(zhí)行相同操作,則可用集合簡(jiǎn)化代碼。
例如,下列代碼遍歷控件集合,并在列表框中列出每個(gè)成員的名字。
dim mycontrol as control
for each mycontrol in form1.controls
‘把每個(gè)控件的名字送到列表框。
list1.additem mycontrol.name
next mycontrol
應(yīng)用集合成員的屬性與方法
有兩種通用方法可用來(lái)對(duì)集合對(duì)象成員尋址:
指定成員的名稱。以下兩個(gè)表達(dá)式等價(jià):
controls (”list1″)
controls!list1
利用成員的索引號(hào):
controls (3)
一旦能夠從整體上對(duì)全體成員尋址,而且還能夠個(gè)別地對(duì)單個(gè)成員尋址,就可用下面隨便一種方式應(yīng)用屬性和方法:
’將 listbox 控件的 top 屬性設(shè)置為 200。
controls!list1.top = 200
-或者-
dim mycontrol as control
for each mycontrol in form1.controls ()
‘將每一個(gè)成員的 top 屬性設(shè)置為 200。
mycontrol.top = 200
next mycontrol
包含其它對(duì)象的對(duì)象
在 visual basic 中,一些對(duì)象包含其它對(duì)象。例如,窗體通常包含一個(gè)或數(shù)個(gè)控件。把一個(gè)對(duì)象當(dāng)作其它對(duì)象的容器,這樣做的好處在于,在代碼中引用容器即可明了要使用哪個(gè)對(duì)象。例如,在一個(gè)應(yīng)用程序中可有兩個(gè)不同的窗體,一個(gè)用來(lái)輸入應(yīng)付帳交易,另一個(gè)用來(lái)輸入應(yīng)收帳交易。
兩個(gè)窗口可以有名為 istacctno 的列表框。通過(guò)引用包含列表框的窗體就可準(zhǔn)確指定要使用的列表框:
frmreceivable.lstacctno.additem 1201
-或者-
frmpayable.lstacctno.additem 1201
visual basic 中的公共集合
在 visual basic 中一個(gè)對(duì)象包含其它對(duì)象的一般情況時(shí)有發(fā)生。下表簡(jiǎn)要敘述 visual basic 中最常用的集合。
集合 描述
forms 包含載入的窗體。
controls 包含窗體上的控件。
printers 包含可用的打印機(jī)對(duì)象。
在 visual basic 中也可實(shí)現(xiàn)對(duì)象控制。
詳細(xì)信息 關(guān)于對(duì)象容器的詳細(xì)信息,請(qǐng)參閱“再論編程”中的“使用集合替代數(shù)組”。關(guān)于打印機(jī)集合的信息,參閱“使用文本和圖形”。關(guān)于窗體集合和控件集合的詳細(xì)信息,請(qǐng)參閱語(yǔ)言參考。
容器屬性
在窗體內(nèi),可用 container 屬性改變對(duì)象的容器。以下控件可包含其它控件:
frame 控件
picturebox 控件
toolbar 控件(僅對(duì)專業(yè)版和企業(yè)版而言)
如何在窗體上將命令按鈕從一個(gè)容器移動(dòng)到另一個(gè)容器,該例對(duì)此作了演示。打開(kāi)新工程,并在窗體上畫出 frame 控件、picturebox 控件和 commandbutton 控件。
下列代碼在窗體單擊事件中,這些代碼使計(jì)數(shù)器變量增加,并通過(guò) select case 循環(huán)使命令按鈕在容器之間移動(dòng)。
private sub form_click ()
static intx as integer
select case intx
case 0
set command1.container = picture1
command1.top= 0
command1.left= 0
case 1
set command1.container = frame1
command1.top= 0
command1.left= 0
case 2
set command1.container = form1
command1.top= 0
command1.left= 0
end select
intx = intx + 1
end sub
詳細(xì)信息 請(qǐng)參閱語(yǔ)言參考中的“container 屬性”。
對(duì)象之間的通訊
除了在 visual basic 中使用和創(chuàng)建對(duì)象外,還可與其它應(yīng)用程序通訊并在自己的應(yīng)用程序中操作其它應(yīng)用程序的對(duì)象。在應(yīng)用程序之間共享數(shù)據(jù)的能力是 microsoft windows 操作系統(tǒng)的關(guān)鍵性能之一。有了 visual basic,與其它應(yīng)用程序進(jìn)行通訊變得極為靈活。
詳細(xì)信息 關(guān)于使用其它應(yīng)用程序的對(duì)象及其通訊的詳細(xì)信息,請(qǐng)參閱“用部件編程”。