在 visual basic中創(chuàng)建應(yīng)用程序之際,也就是和對象打交道之時了。可以使用 visual basic 提供的對象— 比如控件、窗體和數(shù)據(jù)訪問對象。也可以在一個 visual basic 應(yīng)用程序內(nèi)部控制另一個應(yīng)用程序?qū)ο?。甚至還可建立自己的對象,定義它們的屬性和方法。
對象是什么
對象是代碼和數(shù)據(jù)的組合,可以作為一個單位來處理。對象可以是應(yīng)用程序的一部分,比如可以是控件或窗體。整個應(yīng)用程序也是一個對象。下表列出了在 visual basic 中可能用到的幾種類型的對象:
示例 描述
命令按鈕 窗體上的控件,象命令按鈕和框架,它們都是對象。
窗體 visual basic 工程中的每一個窗體都是獨立的對象。
數(shù)據(jù)庫 數(shù)據(jù)庫是對象,并且還包含其他對象,如字段、索引等。
圖表 microsoft excel 中的圖表是對象。
對象從何而來
visual basic 中的每個對象都是用類定義的。用餅干模子和餅干之間的關(guān)系作比,就會明白對象和它的類之間的關(guān)系。餅干模子是類。它確定了每塊餅干的特征,比如大小和形狀。用類創(chuàng)建對象。對象就是餅干。
下面再用兩個例子進一步說明 visual basic 中類與對象之間的關(guān)系。
在 visual basic 的“工具箱”上,控件代表類。直到在窗體上畫出這些被稱作控件的對象為止,它們實際上并不存在。在創(chuàng)建控件之時也就是在復(fù)制控件類,或建立控件類的實例。這個類實例就是應(yīng)用程序中引用的對象。
在設(shè)計時操作的窗體是類。在運行時,visual basic 建立窗體的類實例。
“屬性”窗口顯示 visual basic 應(yīng)用程序中的對象的類和 name 屬性
把對象看作是類的原原本本的復(fù)制品,從而建立所有對象。一旦它們以單個對象的形式存在,屬性就可改變。例如,如果在窗體上畫了三個命令按鈕,則每個命令按鈕對象都是命令按鈕類的實例。 每個對象都具有一組由類定義的公共的特征和功能(屬性、方法和事件)。但是,每個對象都有自己的名字,都能分別設(shè)置成有效或無效,都能放在窗體的不同位置,等等。
為簡單起見,本章之外的大部分內(nèi)容將不過多引用對象的類。例如,只要記住術(shù)語“listbox 控件”意味著“列表框類的一個實例”。
用對象能做什么
對象可提供現(xiàn)成代碼,省卻書寫麻煩。例如,可以自己創(chuàng)建打開文件和保存文件的對話框,但實際上大可不必。取而代之的是利用 visual basic 提供的 commondialog 控件(一個對象)。雖然用戶也能撰寫日程管理和資源管理的程序,但也大可不必。在此亦可使用 microsoft project 提供的 calendar、resources 和 task 對象。
visual basic 可以組合來自其它來源的對象
visual basic 提供了把來自不同資源的對象組合起來的工具?,F(xiàn)在可把 visual basic 的各種強有力的特性以及支持自動化(先前以 ole 自動化聞名)的應(yīng)用程序結(jié)合起來,建立定制的解決方法。自動化是部件對象模式 (com) 的一個特性,它是應(yīng)用程序使用的工業(yè)標(biāo)準(zhǔn),用來陳列對象以開發(fā)工具和其它應(yīng)用程序。
可把 visual basic 內(nèi)部的控件結(jié)合在一起,也可使用其它應(yīng)用程序提供的對象??紤]把下列對象放入 visual basic 窗體:
microsoft excel chart 對象
microsoft excel worksheet 對象
microsoft word document 對象
可用這些對象建立支票簿應(yīng)用程序。由于不必書寫代碼,重建已由 microsoft excel 和 word 等對象提供的功能,因而節(jié)省很多時間。
使用對象初步
visual basic 對象支持屬性、方法和事件。在 visual basic 中,稱對象的數(shù)據(jù)(設(shè)置和屬性)為屬性,稱各種可在對象上操作的過程為方法。事件是可被對象識別的動作,例如單擊鼠標(biāo)和按下鍵盤鍵,還可編寫代碼來響應(yīng)事件。
改變對象的屬性就可改變對象的特性。用收音機打比方,收音機的一個屬性是音量。用 visual basic 的行話來說,就是收音機有個“volume”屬性,改變其值就可調(diào)節(jié)音量大小。假定收音機的音量值可設(shè)置在 0 到 10 之間。 如果能夠通過 visual basic 控制收音機,則可在一個過程中寫代碼,把“volume”屬性值從 3 提高到 5,使聲音更響一些:
radio.volume = 5
除了屬性以外,對象還有方法。方法和屬性都是對象的一部分。一般說來,方法就是要執(zhí)行的動作,而屬性就是要設(shè)置或檢索的特性。以撥號打電話為例。可以說電話有一個“撥號”方法,撥一個 7 位電話號碼的語法就是:
phone.dial 5551111
對象還有事件。當(dāng)對象的某方面有變動時就觸發(fā)了事件。例如,收音機可能有“volumechange”事件。電話可能有“ring”事件,等等。
用屬性控制對象
個別屬性隨著可以設(shè)置和取得它們的值的時間不同而不同。有的屬性可在設(shè)計時設(shè)置??稍?#8220;屬性”窗口設(shè)置這些屬性的值而無需編寫任何代碼。而有的屬性在設(shè)計時是不可用的;因此,這些屬性只有通過代碼在運行時設(shè)置。
在運行時可以設(shè)置并可獲得值的屬性叫做讀寫屬性。在運行時只能讀取的屬性叫做只讀屬性。
設(shè)置屬性值
在想改變對象的外觀或特性時設(shè)置屬性的值。例如,通過改變 textbox 控件的 text 屬性,就可以改變文本框的內(nèi)容。
用下列語法設(shè)置屬性值:
object.property = expression
下面是設(shè)置屬性的語句:
text1.top = 200 ‘ 設(shè)置 top 屬性為 200 緹。
text1.visible = true ’ 顯示文本框。
text1.text = “hello” ‘ 在文本框中顯示 “hello”。
讀取屬性值
想要在代碼執(zhí)行附加動作(例如給另一個對象賦值)之前得知對象的狀態(tài),這時就要讀取屬性值。例如,在運行代碼之前能夠返回 textbox 控件的 text 屬性值,以確定文本框的內(nèi)容,這里,代碼可能改變值。
在大多數(shù)情況下可以用以下語法獲得屬性值:
variable = object.property
屬性值可以作為較復(fù)雜的表達式的一部分,而不必將屬性賦予變量。下面的代碼計算控件數(shù)組中的一個新成員的 top 屬性,它等于前一個成員的 top 屬性加上 400。
private sub cmdadd_click ()
’ [語句]
optbutton (n).top = optbutton (n-1).top + 400
‘ [語句]
end sub
提示 如果不只一次使用一個屬性值,而且將這個值存儲到一個變量中,則代碼執(zhí)行起來會更快。
用方法來執(zhí)行動作
方法能夠影響屬性值。例如在用收音機打比方的例子中,setvolume 方法改變了 volume 屬性。與此類似,在 visual basic 中列表框具有 list 屬性,而 clear 和 additem 方法可以改變這一屬性。
在代碼中使用方法
在代碼中使用方法時如何書寫語句,這取決于該方法要求多少參數(shù),以及是否返回一個值。如果方法不要求參數(shù),則用以下語法編寫代碼:
object.method
下例中,用 refresh 方法重畫圖片框:
picture1.refresh ’ 強迫重畫控件。
有些方法,如上面的 refresh ,既無參數(shù)又不返回值。
如果方法要用多個參數(shù),就用逗號將它們分開。例如, circle 方法就要用代表窗體上圓的位置、半徑和顏色的參數(shù):
‘ 畫一個半徑為 1200 緹的藍色園。
form1.circle (1600, 1800), 1200, vbblue
如果要保存方法的返回值,就必須把參數(shù)用括號括起來。例如, getdata 方法從剪貼板返回一張圖片:
picture = clipboard.getdata (vbcfbitmap)
如果沒有返回值,則參數(shù)不會出現(xiàn)在括號中。例如,additem 方法沒有返回值。
list1.additem “yourname” ’ 在列表框中添加 “yourname”。
詳細信息 關(guān)于 visual basic 對所有方法提供的語法和參數(shù),請參閱語言參考