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