創(chuàng)建對象的最簡單方法是在“工具箱”中雙擊控件,。但是,對 visual basic 中的所有可用對象以及來自其它應用程序的所有可用對象,,要想充分體現(xiàn)它們的優(yōu)勢,,可在運行時用 visual basic 的可編程性能創(chuàng)立對象。
用對象變量創(chuàng)建對象引用,。
用類模塊“從零開始”創(chuàng)建自己的對象,。
用集合對象創(chuàng)建自己的集合。
詳細信息 其它章節(jié)會介紹如何訪問對象,。例如,,在“用部件編程”中將討論 createobject 和 getobject 函數(shù)。
使用對象變量
除了存儲值以外,,變量可引用對象,。如同給變量賦值一樣,基于下列相同理由,,可把對象賦給變量:
變量名往往比變量所含的值(或者,,在此情況下,所含值就是它們引用的對象)短而好記,。
在運行代碼時,,為了引用其它對象,應改變變量,。
引用包含對象的變量比反復引用對象本身有更高的效率,。
使用對象變量與使用常規(guī)變量一樣,只不過多了把對象賦予變量這一步:
首先聲明變量:
dim variable as class
然后把對象賦予變量:
set variable = object
聲明對象變量
聲明對象變量的方法和聲明其它變量一樣,,要用 dim,、redim,、static、private 和 public,。僅有的不同在于可選的 new 關鍵字和 class 參數(shù),,本章后面將會對 new 關鍵字和 class 參數(shù)都作介紹。語法是:
{dim | redim | static | private | public} variable as [new] class
例如,,可以聲明一個對象變量,,它引用應用程序中的被稱做 frmmain 的窗體:
dim formvar as new frmmain ‘聲明一個類型為 frmmain
’的對象變量。
也可以聲明一個對象變量,,它引用應用程序中的任何窗體:
dim anyform as form ‘一般窗體變量,。
類似地,可以聲明一個對象變量,,它能夠引用應用程序中的任何文本框:
dim anytext as textbox ’可以引用任何文本框
‘(但只能是一個文本框),。
還可以聲明一個對象變量,它能夠引用任何類型的控件:
dim anycontrol as control ’一般控件變量,。
注意,,可以聲明一個引用應用程序中的指定窗體的窗體變量,但不能聲明引用特定控件的控件變量,??梢月暶髂軌蛞每丶奶囟愋停ㄈ?textbox 或列表框)的控件變量,但不是引用那種類型的一個特定控件(如 txtentry 或 list1),。但是,,可把特定的控件賦予那種類型的變量。例如,,對于具有列表框 lstsample 的窗體可以這樣編碼:
dim objdemo as listbox
set objdemo = lstsample
賦值對象變量
用 set 語句將對象賦予對象變量:
set variable = object
無論何時,,只要希望對象變量引用對象,就可使用 set 語句,。
有時可用對象變量,,尤其可用控件變量直接縮短要鍵入的代碼。例如,,原來的代碼是這樣的:
if frmaccountdisplay!txtaccountbalance.text < 0 then
frmaccountdisplay!txtaccountbalance.backcolor = 0 frmaccountdisplay!txtaccountbalance.forecolor = 255
end if
如果使用控件變量,,程序就可顯著縮短:
dim bal as textbox
set bal = frmaccountdisplay!txtaccountbalance
if bal.text < 0 then
bal.backcolor = 0
bal.forecolor = 255
end if
特定對象類型與一般對象類型
特定的對象變量必須引用特定類型的對象或類。特定的窗體變量只能引用應用程序中的一個窗體(盡管可在該窗體的諸多實例中引用其中之一),。與此相似,,特定的控件變量只能引用應用程序中的特定類型的控件,比如 textbox 或者列表框,。請看一例,,打開新的工程,在窗體中放置一文本框。將下列代碼添加到窗體中:
private sub form_click ()
dim anytext as textbox
set anytext = text1
anytext.text = “hello”
end sub
運行應用程序并單擊窗體,。文本框的 text 屬性將變成 “hello”,。
一般對象變量可在多種特定對象類型中引用其中一種。例如,,一般窗體變量可引用應用程序中的任何窗體,;一般控件變量可引用應用程序中任何窗體上的任何控件。請看一例,,打開新的工程并在窗體中按任意順序放置若干 frame,、label 和 commandbutton 控件,。將下列代碼添加到窗體中:
private sub form_click ()
dim anycontrol as control
set anycontrol = form1.controls (3)
anycontrol.caption = “hello”
end sub
運行程序并單擊窗體,。剛才放入窗體中的第三個控件的標題將變成 “hello”。
visual basic 中有四種一般對象:
一般對象類型 可引用的對象
form 應用程序中的任何窗體(包括 mdi 子窗體和 mdi 窗體),。
control 應用程序中的任何控件,。
mdiform 應用程序中的 mdi 窗體(如果應用程序有 mdi 窗體的話)。
object 任何對象,。
在不知道變量運行時是否引用特定類型的對象時,,一般對象變量是很有用的。例如,,如果要書寫代碼,,并使之在應用程序的任何窗體中都可操作,則必須使用一般窗體變量,。
注意 由于應用程序中只能有一個 mdi 窗體,,因此不必使用一般的 mdiform 類型。無論何時,,一旦需要聲明引用 mdi 窗體的窗體變量,,就可用特定的 mdiform 類型(或者是 mdiform1,或者是對 mdi 窗體的 name 屬性指定的任何名稱),,而不用一般的 mdiform 類型,。實際上,由于在運行應用程序前,,visual basic 就能夠決定引用特定窗體類型的屬性和方法,,因此總應使用特定的 mdiform 類型。
只是出于完整性的考慮才提供一般的 mdiform 類型,;在 visual basic 的今后版本中,,單個應用程序中可以擁有多個 mdi 窗體,這將是非常有用的,。
作為對象的窗體
窗體最常用到的是構造應用程序界面,,但也常常是應用程序中其它模塊調用的對象。窗體與類模塊關系密切。兩者之間的主要區(qū)別在于,,窗體是可視對象,,而類模塊卻沒有可視界面。
添加自定義方法和屬性
可對窗體添加自定義方法和屬性,,并可從應用程序中的其它模塊訪問它們,。為了創(chuàng)建窗體的新方法,請?zhí)砑佑?public 聲明的過程,。
‘自定義 form1 的方法,。
public sub latejobscount ()
.
. ’
.
end sub
可用下面這個語句從其它模塊調用 latejobscount 過程:
form1.latejobscount
創(chuàng)建窗體的新屬性就象在窗體模塊中聲明一個公用變量那樣簡單:
public idnumber as integer
可用下面兩個語句從其它模塊設置和返回 form1 的 idnumber 值:
form1.idnumber = 3
text1.text = form1.idnumber
也可用 property 過程向窗體添加自定義屬性。
詳細信息 “用對象編程”提供了 property 過程的詳細材料,。
注意 不必加載窗體就可調用窗體的變量或自定義方法,,還可設置窗體的自定義屬性。于是,,不必將窗體加載到內存就可運行有關窗體的代碼,。同樣,引用控件而不引用其屬性或方法時也不會加載窗體,。
使用 new 關鍵字
用 new 關鍵字創(chuàng)建新對象,,這個對象被視為它的類所定義的對象??捎?new 創(chuàng)建集合,、窗體的實例以及類模塊中定義的類。
在窗體上使用 new 關鍵字
在設計時創(chuàng)建的窗體是類,??捎?new 關鍵字創(chuàng)建這個類的新實例。為了看到這一工作過程,,請在窗體上畫出一個命令按鈕和其它幾個控件,。在“屬性”窗口中將窗體的 name 屬性設置成 sample。在命令按鈕的 click 事件過程中添加下列代碼:
dim x as new sample
x.show
運行應用程序,,并單擊命令按鈕數(shù)次,。把最前面的窗體移到一邊。因為窗體是具有可視界面的類,,所以可看到附加副本,。每個窗體在相同位置上都有相同控件,而且這些位置也正是窗體在設計時的位置,。
注意 要使窗體變量和已加載窗體的實例一直存在,,請用 static 或 public 變量,而不要用局部變量,。
也可將 new 關鍵字與 set 語句并用,。請試用命令按鈕的 click 事件過程中的代碼:
dim f as form1
set f = new form1
f.caption = “hello”
f.show
將 new 關鍵字和 set 語句并用會加快運行速度,因此,這種方法值得推薦,。
對其它對象使用 new 關鍵字
可用 new 關鍵字從類模塊中定義的類創(chuàng)建集合和對象,。試用下例說明這一工作過程。
此例說明了 new 關鍵字是如何創(chuàng)建類的實例的,。打開新工程,,在 form1 上畫出一個 commandbutton 控件。從“工程”菜單中選擇“添加類模塊”命令,,從而在工程中添加一個類模塊,。設置類模塊的 name 屬性為 showme 。
form1 中的下列代碼創(chuàng)建了類 showme 的新實例,,還調用了包含在類模塊中的過程,。
public clsnew as showme
private sub command1_click ()
set clsnew = new showme
clsnew.showfrm
end sub
類模塊中的 showfrm 過程創(chuàng)建類 form1 的新實例,顯示窗體,,然后使其最小化,。
sub showfrm ()
dim frmnew as form1
set frmnew = new form1
frmnew.show
frmnew.windowstate = 1
end sub
為了應用這個例子,請運行應用程序并單擊命令按鈕數(shù)次,。在創(chuàng)建 showme 類的每一個新實例時將看到最小化的窗體圖標出現(xiàn)在桌面上。
詳細信息 關于利用 new 創(chuàng)建對象的信息,,請參閱“用部件編程”,。
new 關鍵字的限制
下表說明不能用 new 關鍵字做什么。
不能用 new 創(chuàng)建 不允許的代碼的例子
基本數(shù)據(jù)類型的變量,。 dim x as new integer
任何一般對象類型的變量,。 dim x as new control
任何特定控件類型的變量。 dim x as new listbox
任何特定控件的變量,。 dim x as new lstnames
釋放對對象的引用
每個對象都使用內存和系統(tǒng)資源,。當不再使用對象時及時釋放這些資源,這是良好的編程習慣,。
用 unload 從內存中卸載窗體或控件,。
用 nothing 釋放對象變量占用的資源。用 set 語句將 nothing 賦予對象變量,。
詳細信息 請參閱語言參考中的“unload 事件”和“nothing”部分,。
給過程傳遞對象
可在 visual basic 中將對象傳遞給過程。在下面的代碼例子中假定窗體中有一 commandbutton 控件:
private sub command1_click ()
‘調用 demo 子過程,,并將窗體傳遞給它,。
demo form1
end sub
private sub demo (x as form1)
’在屏幕中使窗體居中。
x.left = (screen.width – x.width) / 2
end sub
可以通過引用把對象傳遞給參數(shù),,然后在過程內將參數(shù)設置成新對象,。為了看到這一工作過程,打開工程并插入第二個窗體。在每個窗體中安放一個圖片框,。需要改變的屬性設置值如下表所示:
對象 屬性 設置
form2 上的 圖片框 name
picture
picture2
c:\vb\icons\arrows\arw01dn.ico
form1_click 事件過程調用 form2 中的 getpicture 過程,,并把一個空的圖片框傳遞給它。
private sub form_click ()
form2.getpicture picture1
end sub
form2 中的 getpicture 過程把 form2 上的圖片框的 picture 屬性賦予 form1 上的空圖片框,。
private objx as picturebox
public sub getpicture (x as picturebox)
‘將傳遞進來的圖片框賦予對象變量,。
set objx = x
’將 picture 屬性值賦予 form1 的圖片框。
objx.picture = picture2.picture
end sub
為了應用這個例子,,請運行程序并單擊 form1,。在 form1 的圖片框中將看到出現(xiàn)了 form2 中的圖標。
詳細信息 上述主題意在概述對象,。更詳細內容,,請參閱“用對象編程”和“用部件編程”。