使用對(duì)象
在 Visual Basic中創(chuàng)建應(yīng)用程序之際,也就是和對(duì)象打交道之時(shí)了??梢允褂?Visual Basic 提供的對(duì)象, 比如控件、窗體和數(shù)據(jù)訪問對(duì)象。也可以在一個(gè) Visual Basic 應(yīng)用程序內(nèi)部控制另一個(gè)應(yīng)用程序?qū)ο?。甚至還可建立自己的對(duì)象,定義它們的屬性和方法。
對(duì)象是什么
對(duì)象是代碼和數(shù)據(jù)的組合,可以作為一個(gè)單位來處理。對(duì)象可以是應(yīng)用程序的一部分,比如可以是控件或窗體。整個(gè)應(yīng)用程序也是一個(gè)對(duì)象。下表列出了在 Visual Basic 中可能用到的幾種類型的對(duì)象:
對(duì)象從何而來Visual Basic 中的每個(gè)對(duì)象都是用類定義的。用餅干模子和餅干之間的關(guān)系作比喻,就會(huì)明白對(duì)象和它的類之間的關(guān)系。餅干模子是類。它確定了每塊餅干的特征,比如大小和形狀。用類創(chuàng)建對(duì)象。對(duì)象就是餅干。
下面再用兩個(gè)例子進(jìn)一步說明 Visual Basic 中類與對(duì)象之間的關(guān)系。
1.在 Visual Basic 的“工具箱”上,控件代表類。直到在窗體上畫出這些被稱作控件的對(duì)象為止,它們實(shí)際上并不存在。在創(chuàng)建控件之時(shí)也就是在復(fù)制控件類,或建立控件類的實(shí)例。這個(gè)類實(shí)例就是應(yīng)用程序中引用的對(duì)象。
2.在設(shè)計(jì)時(shí)操作的窗體是類。在運(yùn)行時(shí),Visual Basic 建立窗體的類實(shí)例?!皩傩浴贝翱陲@示Visual Basic應(yīng)用程序中的對(duì)象的類和Name屬性,如圖5.8所示。
把對(duì)象看作是類的原原本本的復(fù)制品,從而建立所有對(duì)象。一旦它們以單個(gè)對(duì)象的形式存在,屬性就可改變。例如,如果在窗體上畫了三個(gè)命令按鈕,則每個(gè)命令按鈕對(duì)象都是命令按鈕類的實(shí)例。 每個(gè)對(duì)象都具有一組由類定義的公共的特征和功能(屬性、方法和事件)。但是,每個(gè)對(duì)象都有自己的名字,都能分別設(shè)置成有效或無效,都能放在窗體的不同位置,等等。
為簡(jiǎn)單起見,本章之外的大部分內(nèi)容將不過多引用對(duì)象的類。例如,只要記住術(shù)語“ListBox 控件”意味著“列表框類的一個(gè)實(shí)例”。
用對(duì)象能做什么
對(duì)象可提供現(xiàn)成代碼,省卻書寫麻煩。例如,可以自己創(chuàng)建打開文件和保存文件的對(duì)話框,但實(shí)際上大可不必。取而代之的是利用 Visual Basic 提供的 CommonDialog 控件(一個(gè)對(duì)象)。雖然用戶也能撰寫日程管理和資源管理的程序,但也大可不必。在此亦可使用 Microsoft Project 提供的Calendar、Resources 和 Task 對(duì)象。
Visual Basic 可以組合來自其它來源的對(duì)象
Visual Basic 提供了把來自不同資源的對(duì)象組合起來的工具?,F(xiàn)在可把Visual Basic 的各種強(qiáng)有力的特性以及支持自動(dòng)化(先前以 OLE 自動(dòng)化聞名)的應(yīng)用程序結(jié)合起來,建立定制的解決方法。自動(dòng)化是部件對(duì)象模式(COM) 的一個(gè)特性,它是應(yīng)用程序使用的工業(yè)標(biāo)準(zhǔn),用來陳列對(duì)象以開發(fā)工具和其它應(yīng)用程序。
可把 Visual Basic 內(nèi)部的控件結(jié)合在一起,也可使用其它應(yīng)用程序提供的對(duì)象??紤]把下列對(duì)象放入 Visual Basic 窗體: 1.Microsoft Excel Chart 對(duì)象
2.Microsoft Excel Worksheet 對(duì)象
3.Microsoft Word Document 對(duì)象
可用這些對(duì)象建立如圖 5.9 所示的支票簿應(yīng)用程序。由于不必書寫代碼,重建已由 Microsoft Excel 和 Word 等對(duì)象提供的功能,因而節(jié)省很多時(shí)間。
使用對(duì)象初步
Visual Basic 對(duì)象支持屬性、方法和事件。在 Visual Basic 中,稱對(duì)象的數(shù)據(jù)(設(shè)置和屬性)為屬性,稱各種可在對(duì)象上操作的過程為方法。事件是可被對(duì)象識(shí)別的動(dòng)作,例如單擊鼠標(biāo)和按下鍵盤鍵,還可編寫代碼來響應(yīng)事件。
改變對(duì)象的屬性就可改變對(duì)象的特性。用收音機(jī)打比方,收音機(jī)的一個(gè)屬性是音量。用 Visual Basic 的行話來說,就是收音機(jī)有個(gè)“Volume”屬性,改變其值就可調(diào)節(jié)音量大小。假定收音機(jī)的音量值可設(shè)置在 0 到 10 之間。 如果能夠通過 Visual Basic 控制收音機(jī),則可在一個(gè)過程中寫代碼,把“Volume”屬性值從 3 提高到 5,使聲音更響一些:
Radio.Volume = 5
除了屬性以外,對(duì)象還有方法。方法和屬性都是對(duì)象的一部分。一般說來,方法就是要執(zhí)行的動(dòng)作,而屬性就是要設(shè)置或檢索的特性。以撥號(hào)打電話為例??梢哉f電話有一個(gè)“撥號(hào)”方法,撥一個(gè) 7 位電話號(hào)碼的語法就是:
Phone.Dial 5551111
對(duì)象還有事件。當(dāng)對(duì)象的某方面有變動(dòng)時(shí)就觸發(fā)了事件。例如,收音機(jī)可能有“VolumeChange”事件。電話可能有“Ring”事件,等等。
用屬性控制對(duì)象
個(gè)別屬性隨著可以設(shè)置和取得它們的值的時(shí)間不同而不同。有的屬性可在設(shè)計(jì)時(shí)設(shè)置。可在“屬性”窗口設(shè)置這些屬性的值而無需編寫任何代碼。而有的屬性在設(shè)計(jì)時(shí)是不可用的;因此,這些屬性只有通過代碼在運(yùn)行時(shí)設(shè)置。
在運(yùn)行時(shí)可以設(shè)置并可獲得值的屬性叫做讀寫屬性。在運(yùn)行時(shí)只能讀取的屬性叫做只讀屬性。
設(shè)置屬性值
在想改變對(duì)象的外觀或特性時(shí)設(shè)置屬性的值。例如,通過改變 TextBox 控件的 Text 屬性,就可以改變文本框的內(nèi)容。
用下列語法設(shè)置屬性值:
object.property = expression
下面是設(shè)置屬性的語句:
Text1.Top = 200 ' 設(shè)置 Top 屬性為 200 緹(twips)。
Text1.Visible = True ' 顯示文本框。
Text1.Text = "hello" ' 在文本框中顯示 "hello"。
讀取屬性值
想要在代碼執(zhí)行附加動(dòng)作(例如給另一個(gè)對(duì)象賦值)之前得知對(duì)象的狀態(tài),這時(shí)就要讀取屬性值。例如,在運(yùn)行代碼之前能夠返回 TextBox 控件的 Text屬性值,以確定文本框的內(nèi)容,這里,代碼可能改變值。
在大多數(shù)情況下可以用以下語法獲得屬性值:
variable = object.property
屬性值可以作為較復(fù)雜的表達(dá)式的一部分,而不必將屬性賦予變量。下面的代碼計(jì)算控件數(shù)組中的一個(gè)新成員的 Top 屬性,它等于前一個(gè)成員的Top 屬性加上 400。
Private Sub cmdAdd_Click ()
' [語句]
optButton (n).Top = optButton (n-1).Top + 400
' [語句]
End Sub
提示 如果不只一次使用一個(gè)屬性值,而且將這個(gè)值存儲(chǔ)到一個(gè)變量中,則代碼執(zhí)行起來會(huì)更快。
用方法來執(zhí)行動(dòng)作
方法能夠影響屬性值。例如在用收音機(jī)打比方的例子中,SetVolume 方法改變了 Volume 屬性。與此類似,在 Visual Basic 中列表框具有 List 屬性,而 Clear 和 AddItem 方法可以改變這一屬性。
在代碼中使用方法
在代碼中使用方法時(shí)如何書寫語句,這取決于該方法要求多少參數(shù),以及是否返回一個(gè)值。如果方法不要求參數(shù),則用以下語法編寫代碼:
object.method
下例中,用 Refresh 方法重畫圖片框:
Picture1.Refresh ' 強(qiáng)迫重畫控件。
有些方法,如上面的 Refresh ,既無參數(shù)又不返回值。
如果方法要用多個(gè)參數(shù),就用逗號(hào)將它們分開。例如, Circle 方法就要用代表窗體上圓的位置、半徑和顏色的參數(shù):
' 畫一個(gè)半徑為 1200 緹的藍(lán)色圓。
Form1.Circle (1600, 1800), 1200, vbBlue
如果要保存方法的返回值,就必須把參數(shù)用括號(hào)括起來。例如, GetData 方法從剪貼板返回一張圖片:
Picture = Clipboard.GetData (vbCFBitmap)
如果沒有返回值,則參數(shù)不會(huì)出現(xiàn)在括號(hào)中。例如,AddItem 方法沒有返回值。
List1.AddItem "yourname" ' 在列表框中添加 "yourname"。
詳細(xì)信息 關(guān)于 Visual Basic 對(duì)所有方法提供的語法和參數(shù),請(qǐng)參閱《VisualBasic 6.0語言參考手冊(cè)》。
對(duì)象之間的關(guān)系
在同一窗體上放置兩個(gè)命令按鈕時(shí),它們是兩個(gè)具有不同 Name 屬性設(shè)置值(Command1 和 Command2)的分開的對(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é)中將說明 Visual Basic 如何用集合使相關(guān)的對(duì)象分組。
對(duì)象的層次
對(duì)象層次提供了一種組織結(jié)構(gòu),它決定了對(duì)象間的相互關(guān)系以及訪問它們的方法。在大多數(shù)情況下不必考慮 Visual Basic 對(duì)象的層次。但是:
1.在操作其它應(yīng)用程序的對(duì)象時(shí),應(yīng)當(dāng)熟悉那個(gè)應(yīng)用程序的對(duì)象層次。關(guān)于定位對(duì)象層次的信息,請(qǐng)參閱第十章“用部件編程”。
2.在使用數(shù)據(jù)訪問對(duì)象時(shí),應(yīng)當(dāng)熟悉數(shù)據(jù)訪問對(duì)象層次。在 Visual Basic 中,一個(gè)對(duì)象包含其它對(duì)象的一般情況時(shí)有發(fā)生。下面我們要詳細(xì)討論。
使用對(duì)象集合
集合對(duì)象有自己的屬性和方法。對(duì)象集合中的對(duì)象作為集合的成員被引用。集合中的每個(gè)成員從 0 開始順次編號(hào);這就是成員的索引號(hào)。例如,控件集合包含已給定窗體上的所有控件 ,如圖 5.10 所示。如果對(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)用集合成員的屬性與方法
有兩種通用方法可用來對(duì)集合對(duì)象成員尋址:
1.指定成員的名稱。以下兩個(gè)表達(dá)式等價(jià):
Controls ("List1")
Controls!List1
2.利用成員的索引號(hào):
Controls (3)
一旦能夠從整體上對(duì)全體成員尋址,而且還能夠個(gè)別地對(duì)單個(gè)成員尋址,就可用下面隨便一種方式應(yīng)用屬性和方法:
'將 ListBox 控件的 Top 屬性設(shè)置為 200。Controls!List1.Top = 200
?。蛘撸?BR> 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ì)象。例如,圖 5.11 說明在一個(gè)應(yīng)用程序中可有兩個(gè)不同的窗體,一個(gè)用來輸入應(yīng)付帳交易,另一個(gè)用來輸入應(yīng)收帳交易。
兩個(gè)窗口可以有名為 IstAcctNo 的列表框。通過引用包含列表框的窗體就可準(zhǔn)確指定要使用的列表框: frmReceivable.lstAcctNo.AddItem 1201
?。蛘撸?BR> frmPayable.lstAcctNo.AddItem 1201
Visual Basic 中的公共集合
在 Visual Basic 中一個(gè)對(duì)象包含其它對(duì)象的一般情況時(shí)有發(fā)生。下表簡(jiǎn)要敘述 Visual Basic 中最常用的集合。
在 Visual Basic 中也可實(shí)現(xiàn)對(duì)象控制。
詳細(xì)信息 關(guān)于對(duì)象容器的詳細(xì)信息,請(qǐng)參閱第八章“再論編程”中的“使用集合替代數(shù)組”。關(guān)于打印機(jī)集合的信息,參閱第十二章“使用文本和圖形”。關(guān)于窗體集合和控件集合的詳細(xì)信息,請(qǐng)參閱《Visual Basic 6.0語言參考手冊(cè)》。
容器屬性在窗體內(nèi),可用 Container 屬性改變對(duì)象的容器。以下控件可包含其它控件:
1.Frame 控件
2.PictureBox 控件
3.ToolBar 控件(僅對(duì)專業(yè)版和企業(yè)版而言)
如何在窗體上將命令按鈕從一個(gè)容器移動(dòng)到另一個(gè)容器,該例對(duì)此作了演示。打開新工程,并在窗體上畫出 Frame 控件、PictureBox 控件和CommandButton 控件。
下列代碼在窗體單擊事件中,這些代碼使計(jì)數(shù)器變量增加,并通過 SelectCase 循環(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 Selectint
X = intX + 1
End Sub
詳細(xì)信息 請(qǐng)參閱《Visual Basic 6.0語言參考手冊(cè)》中的“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)參閱第十章“用部件編程”。
在 Visual Basic中創(chuàng)建應(yīng)用程序之際,也就是和對(duì)象打交道之時(shí)了??梢允褂?Visual Basic 提供的對(duì)象, 比如控件、窗體和數(shù)據(jù)訪問對(duì)象。也可以在一個(gè) Visual Basic 應(yīng)用程序內(nèi)部控制另一個(gè)應(yīng)用程序?qū)ο?。甚至還可建立自己的對(duì)象,定義它們的屬性和方法。
對(duì)象是什么
對(duì)象是代碼和數(shù)據(jù)的組合,可以作為一個(gè)單位來處理。對(duì)象可以是應(yīng)用程序的一部分,比如可以是控件或窗體。整個(gè)應(yīng)用程序也是一個(gè)對(duì)象。下表列出了在 Visual Basic 中可能用到的幾種類型的對(duì)象:
對(duì)象從何而來Visual Basic 中的每個(gè)對(duì)象都是用類定義的。用餅干模子和餅干之間的關(guān)系作比喻,就會(huì)明白對(duì)象和它的類之間的關(guān)系。餅干模子是類。它確定了每塊餅干的特征,比如大小和形狀。用類創(chuàng)建對(duì)象。對(duì)象就是餅干。
下面再用兩個(gè)例子進(jìn)一步說明 Visual Basic 中類與對(duì)象之間的關(guān)系。
1.在 Visual Basic 的“工具箱”上,控件代表類。直到在窗體上畫出這些被稱作控件的對(duì)象為止,它們實(shí)際上并不存在。在創(chuàng)建控件之時(shí)也就是在復(fù)制控件類,或建立控件類的實(shí)例。這個(gè)類實(shí)例就是應(yīng)用程序中引用的對(duì)象。
2.在設(shè)計(jì)時(shí)操作的窗體是類。在運(yùn)行時(shí),Visual Basic 建立窗體的類實(shí)例?!皩傩浴贝翱陲@示Visual Basic應(yīng)用程序中的對(duì)象的類和Name屬性,如圖5.8所示。
把對(duì)象看作是類的原原本本的復(fù)制品,從而建立所有對(duì)象。一旦它們以單個(gè)對(duì)象的形式存在,屬性就可改變。例如,如果在窗體上畫了三個(gè)命令按鈕,則每個(gè)命令按鈕對(duì)象都是命令按鈕類的實(shí)例。 每個(gè)對(duì)象都具有一組由類定義的公共的特征和功能(屬性、方法和事件)。但是,每個(gè)對(duì)象都有自己的名字,都能分別設(shè)置成有效或無效,都能放在窗體的不同位置,等等。
為簡(jiǎn)單起見,本章之外的大部分內(nèi)容將不過多引用對(duì)象的類。例如,只要記住術(shù)語“ListBox 控件”意味著“列表框類的一個(gè)實(shí)例”。
用對(duì)象能做什么
對(duì)象可提供現(xiàn)成代碼,省卻書寫麻煩。例如,可以自己創(chuàng)建打開文件和保存文件的對(duì)話框,但實(shí)際上大可不必。取而代之的是利用 Visual Basic 提供的 CommonDialog 控件(一個(gè)對(duì)象)。雖然用戶也能撰寫日程管理和資源管理的程序,但也大可不必。在此亦可使用 Microsoft Project 提供的Calendar、Resources 和 Task 對(duì)象。
Visual Basic 可以組合來自其它來源的對(duì)象
Visual Basic 提供了把來自不同資源的對(duì)象組合起來的工具?,F(xiàn)在可把Visual Basic 的各種強(qiáng)有力的特性以及支持自動(dòng)化(先前以 OLE 自動(dòng)化聞名)的應(yīng)用程序結(jié)合起來,建立定制的解決方法。自動(dòng)化是部件對(duì)象模式(COM) 的一個(gè)特性,它是應(yīng)用程序使用的工業(yè)標(biāo)準(zhǔn),用來陳列對(duì)象以開發(fā)工具和其它應(yīng)用程序。
可把 Visual Basic 內(nèi)部的控件結(jié)合在一起,也可使用其它應(yīng)用程序提供的對(duì)象??紤]把下列對(duì)象放入 Visual Basic 窗體: 1.Microsoft Excel Chart 對(duì)象
2.Microsoft Excel Worksheet 對(duì)象
3.Microsoft Word Document 對(duì)象
可用這些對(duì)象建立如圖 5.9 所示的支票簿應(yīng)用程序。由于不必書寫代碼,重建已由 Microsoft Excel 和 Word 等對(duì)象提供的功能,因而節(jié)省很多時(shí)間。
使用對(duì)象初步
Visual Basic 對(duì)象支持屬性、方法和事件。在 Visual Basic 中,稱對(duì)象的數(shù)據(jù)(設(shè)置和屬性)為屬性,稱各種可在對(duì)象上操作的過程為方法。事件是可被對(duì)象識(shí)別的動(dòng)作,例如單擊鼠標(biāo)和按下鍵盤鍵,還可編寫代碼來響應(yīng)事件。
改變對(duì)象的屬性就可改變對(duì)象的特性。用收音機(jī)打比方,收音機(jī)的一個(gè)屬性是音量。用 Visual Basic 的行話來說,就是收音機(jī)有個(gè)“Volume”屬性,改變其值就可調(diào)節(jié)音量大小。假定收音機(jī)的音量值可設(shè)置在 0 到 10 之間。 如果能夠通過 Visual Basic 控制收音機(jī),則可在一個(gè)過程中寫代碼,把“Volume”屬性值從 3 提高到 5,使聲音更響一些:
Radio.Volume = 5
除了屬性以外,對(duì)象還有方法。方法和屬性都是對(duì)象的一部分。一般說來,方法就是要執(zhí)行的動(dòng)作,而屬性就是要設(shè)置或檢索的特性。以撥號(hào)打電話為例??梢哉f電話有一個(gè)“撥號(hào)”方法,撥一個(gè) 7 位電話號(hào)碼的語法就是:
Phone.Dial 5551111
對(duì)象還有事件。當(dāng)對(duì)象的某方面有變動(dòng)時(shí)就觸發(fā)了事件。例如,收音機(jī)可能有“VolumeChange”事件。電話可能有“Ring”事件,等等。
用屬性控制對(duì)象
個(gè)別屬性隨著可以設(shè)置和取得它們的值的時(shí)間不同而不同。有的屬性可在設(shè)計(jì)時(shí)設(shè)置。可在“屬性”窗口設(shè)置這些屬性的值而無需編寫任何代碼。而有的屬性在設(shè)計(jì)時(shí)是不可用的;因此,這些屬性只有通過代碼在運(yùn)行時(shí)設(shè)置。
在運(yùn)行時(shí)可以設(shè)置并可獲得值的屬性叫做讀寫屬性。在運(yùn)行時(shí)只能讀取的屬性叫做只讀屬性。
設(shè)置屬性值
在想改變對(duì)象的外觀或特性時(shí)設(shè)置屬性的值。例如,通過改變 TextBox 控件的 Text 屬性,就可以改變文本框的內(nèi)容。
用下列語法設(shè)置屬性值:
object.property = expression
下面是設(shè)置屬性的語句:
Text1.Top = 200 ' 設(shè)置 Top 屬性為 200 緹(twips)。
Text1.Visible = True ' 顯示文本框。
Text1.Text = "hello" ' 在文本框中顯示 "hello"。
讀取屬性值
想要在代碼執(zhí)行附加動(dòng)作(例如給另一個(gè)對(duì)象賦值)之前得知對(duì)象的狀態(tài),這時(shí)就要讀取屬性值。例如,在運(yùn)行代碼之前能夠返回 TextBox 控件的 Text屬性值,以確定文本框的內(nèi)容,這里,代碼可能改變值。
在大多數(shù)情況下可以用以下語法獲得屬性值:
variable = object.property
屬性值可以作為較復(fù)雜的表達(dá)式的一部分,而不必將屬性賦予變量。下面的代碼計(jì)算控件數(shù)組中的一個(gè)新成員的 Top 屬性,它等于前一個(gè)成員的Top 屬性加上 400。
Private Sub cmdAdd_Click ()
' [語句]
optButton (n).Top = optButton (n-1).Top + 400
' [語句]
End Sub
提示 如果不只一次使用一個(gè)屬性值,而且將這個(gè)值存儲(chǔ)到一個(gè)變量中,則代碼執(zhí)行起來會(huì)更快。
用方法來執(zhí)行動(dòng)作
方法能夠影響屬性值。例如在用收音機(jī)打比方的例子中,SetVolume 方法改變了 Volume 屬性。與此類似,在 Visual Basic 中列表框具有 List 屬性,而 Clear 和 AddItem 方法可以改變這一屬性。
在代碼中使用方法
在代碼中使用方法時(shí)如何書寫語句,這取決于該方法要求多少參數(shù),以及是否返回一個(gè)值。如果方法不要求參數(shù),則用以下語法編寫代碼:
object.method
下例中,用 Refresh 方法重畫圖片框:
Picture1.Refresh ' 強(qiáng)迫重畫控件。
有些方法,如上面的 Refresh ,既無參數(shù)又不返回值。
如果方法要用多個(gè)參數(shù),就用逗號(hào)將它們分開。例如, Circle 方法就要用代表窗體上圓的位置、半徑和顏色的參數(shù):
' 畫一個(gè)半徑為 1200 緹的藍(lán)色圓。
Form1.Circle (1600, 1800), 1200, vbBlue
如果要保存方法的返回值,就必須把參數(shù)用括號(hào)括起來。例如, GetData 方法從剪貼板返回一張圖片:
Picture = Clipboard.GetData (vbCFBitmap)
如果沒有返回值,則參數(shù)不會(huì)出現(xiàn)在括號(hào)中。例如,AddItem 方法沒有返回值。
List1.AddItem "yourname" ' 在列表框中添加 "yourname"。
詳細(xì)信息 關(guān)于 Visual Basic 對(duì)所有方法提供的語法和參數(shù),請(qǐng)參閱《VisualBasic 6.0語言參考手冊(cè)》。
對(duì)象之間的關(guān)系
在同一窗體上放置兩個(gè)命令按鈕時(shí),它們是兩個(gè)具有不同 Name 屬性設(shè)置值(Command1 和 Command2)的分開的對(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é)中將說明 Visual Basic 如何用集合使相關(guān)的對(duì)象分組。
對(duì)象的層次
對(duì)象層次提供了一種組織結(jié)構(gòu),它決定了對(duì)象間的相互關(guān)系以及訪問它們的方法。在大多數(shù)情況下不必考慮 Visual Basic 對(duì)象的層次。但是:
1.在操作其它應(yīng)用程序的對(duì)象時(shí),應(yīng)當(dāng)熟悉那個(gè)應(yīng)用程序的對(duì)象層次。關(guān)于定位對(duì)象層次的信息,請(qǐng)參閱第十章“用部件編程”。
2.在使用數(shù)據(jù)訪問對(duì)象時(shí),應(yīng)當(dāng)熟悉數(shù)據(jù)訪問對(duì)象層次。在 Visual Basic 中,一個(gè)對(duì)象包含其它對(duì)象的一般情況時(shí)有發(fā)生。下面我們要詳細(xì)討論。
使用對(duì)象集合
集合對(duì)象有自己的屬性和方法。對(duì)象集合中的對(duì)象作為集合的成員被引用。集合中的每個(gè)成員從 0 開始順次編號(hào);這就是成員的索引號(hào)。例如,控件集合包含已給定窗體上的所有控件 ,如圖 5.10 所示。如果對(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)用集合成員的屬性與方法
有兩種通用方法可用來對(duì)集合對(duì)象成員尋址:
1.指定成員的名稱。以下兩個(gè)表達(dá)式等價(jià):
Controls ("List1")
Controls!List1
2.利用成員的索引號(hào):
Controls (3)
一旦能夠從整體上對(duì)全體成員尋址,而且還能夠個(gè)別地對(duì)單個(gè)成員尋址,就可用下面隨便一種方式應(yīng)用屬性和方法:
'將 ListBox 控件的 Top 屬性設(shè)置為 200。Controls!List1.Top = 200
?。蛘撸?BR> 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ì)象。例如,圖 5.11 說明在一個(gè)應(yīng)用程序中可有兩個(gè)不同的窗體,一個(gè)用來輸入應(yīng)付帳交易,另一個(gè)用來輸入應(yīng)收帳交易。
兩個(gè)窗口可以有名為 IstAcctNo 的列表框。通過引用包含列表框的窗體就可準(zhǔn)確指定要使用的列表框: frmReceivable.lstAcctNo.AddItem 1201
?。蛘撸?BR> frmPayable.lstAcctNo.AddItem 1201
Visual Basic 中的公共集合
在 Visual Basic 中一個(gè)對(duì)象包含其它對(duì)象的一般情況時(shí)有發(fā)生。下表簡(jiǎn)要敘述 Visual Basic 中最常用的集合。
在 Visual Basic 中也可實(shí)現(xiàn)對(duì)象控制。
詳細(xì)信息 關(guān)于對(duì)象容器的詳細(xì)信息,請(qǐng)參閱第八章“再論編程”中的“使用集合替代數(shù)組”。關(guān)于打印機(jī)集合的信息,參閱第十二章“使用文本和圖形”。關(guān)于窗體集合和控件集合的詳細(xì)信息,請(qǐng)參閱《Visual Basic 6.0語言參考手冊(cè)》。
容器屬性在窗體內(nèi),可用 Container 屬性改變對(duì)象的容器。以下控件可包含其它控件:
1.Frame 控件
2.PictureBox 控件
3.ToolBar 控件(僅對(duì)專業(yè)版和企業(yè)版而言)
如何在窗體上將命令按鈕從一個(gè)容器移動(dòng)到另一個(gè)容器,該例對(duì)此作了演示。打開新工程,并在窗體上畫出 Frame 控件、PictureBox 控件和CommandButton 控件。
下列代碼在窗體單擊事件中,這些代碼使計(jì)數(shù)器變量增加,并通過 SelectCase 循環(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 Selectint
X = intX + 1
End Sub
詳細(xì)信息 請(qǐng)參閱《Visual Basic 6.0語言參考手冊(cè)》中的“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)參閱第十章“用部件編程”。