日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

VB編程基礎(chǔ)教程17–創(chuàng)建對象 | 異次元軟件世界

 a_cheng 2009-10-21

VB編程基礎(chǔ)教程17–創(chuàng)建對象

收藏到QQ書簽 [ 程序樂園 ]

創(chuàng)建對象的最簡單方法是在“工具箱”中雙擊控件。但是,對 visual basic 中的所有可用對象以及來自其它應(yīng)用程序的所有可用對象,要想充分體現(xiàn)它們的優(yōu)勢,可在運(yùn)行時(shí)用 visual basic 的可編程性能創(chuàng)立對象。
用對象變量創(chuàng)建對象引用。

用類模塊“從零開始”創(chuàng)建自己的對象。

用集合對象創(chuàng)建自己的集合。
詳細(xì)信息 其它章節(jié)會介紹如何訪問對象。例如,在“用部件編程”中將討論 createobject 和 getobject 函數(shù)。
使用對象變量
除了存儲值以外,變量可引用對象。如同給變量賦值一樣,基于下列相同理由,可把對象賦給變量:
變量名往往比變量所含的值(或者,在此情況下,所含值就是它們引用的對象)短而好記。

在運(yùn)行代碼時(shí),為了引用其它對象,應(yīng)改變變量。

引用包含對象的變量比反復(fù)引用對象本身有更高的效率。
使用對象變量與使用常規(guī)變量一樣,只不過多了把對象賦予變量這一步:
首先聲明變量:
dim variable as class
然后把對象賦予變量:
set variable = object
聲明對象變量
聲明對象變量的方法和聲明其它變量一樣,要用 dim、redim、static、private 和 public。僅有的不同在于可選的 new 關(guān)鍵字和 class 參數(shù),本章后面將會對 new 關(guān)鍵字和 class 參數(shù)都作介紹。語法是:
{dim | redim | static | private | public} variable as [new] class
例如,可以聲明一個對象變量,它引用應(yīng)用程序中的被稱做 frmmain 的窗體:
dim formvar as new frmmain   ‘聲明一個類型為 frmmain
                           ’的對象變量。
也可以聲明一個對象變量,它引用應(yīng)用程序中的任何窗體:
dim anyform as form         ‘一般窗體變量。
類似地,可以聲明一個對象變量,它能夠引用應(yīng)用程序中的任何文本框:
dim anytext as textbox      ’可以引用任何文本框
                           ‘(但只能是一個文本框)。
還可以聲明一個對象變量,它能夠引用任何類型的控件:
dim anycontrol as control    ’一般控件變量。
注意,可以聲明一個引用應(yīng)用程序中的指定窗體的窗體變量,但不能聲明引用特定控件的控件變量??梢月暶髂軌蛞每丶奶囟愋停ㄈ?textbox 或列表框)的控件變量,但不是引用那種類型的一個特定控件(如 txtentry 或 list1)。但是,可把特定的控件賦予那種類型的變量。例如,對于具有列表框 lstsample 的窗體可以這樣編碼:
dim objdemo as listbox
set objdemo = lstsample
賦值對象變量
用 set 語句將對象賦予對象變量:
set variable = object
無論何時(shí),只要希望對象變量引用對象,就可使用 set 語句。
有時(shí)可用對象變量,尤其可用控件變量直接縮短要鍵入的代碼。例如,原來的代碼是這樣的:
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
特定對象類型與一般對象類型
特定的對象變量必須引用特定類型的對象或類。特定的窗體變量只能引用應(yīng)用程序中的一個窗體(盡管可在該窗體的諸多實(shí)例中引用其中之一)。與此相似,特定的控件變量只能引用應(yīng)用程序中的特定類型的控件,比如 textbox 或者列表框。請看一例,打開新的工程,在窗體中放置一文本框。將下列代碼添加到窗體中:
private sub form_click ()
   dim anytext as textbox
   set anytext = text1
   anytext.text = “hello”
end sub
運(yùn)行應(yīng)用程序并單擊窗體。文本框的 text 屬性將變成 “hello”。
一般對象變量可在多種特定對象類型中引用其中一種。例如,一般窗體變量可引用應(yīng)用程序中的任何窗體;一般控件變量可引用應(yīng)用程序中任何窗體上的任何控件。請看一例,打開新的工程并在窗體中按任意順序放置若干 frame、label 和 commandbutton 控件。將下列代碼添加到窗體中:
private sub form_click ()
   dim anycontrol as control
   set anycontrol = form1.controls (3)
   anycontrol.caption = “hello”
end sub
運(yùn)行程序并單擊窗體。剛才放入窗體中的第三個控件的標(biāo)題將變成 “hello”。
visual basic 中有四種一般對象:
一般對象類型 可引用的對象
form 應(yīng)用程序中的任何窗體(包括 mdi 子窗體和 mdi 窗體)。
control 應(yīng)用程序中的任何控件。
mdiform 應(yīng)用程序中的 mdi 窗體(如果應(yīng)用程序有 mdi 窗體的話)。
object 任何對象。

在不知道變量運(yùn)行時(shí)是否引用特定類型的對象時(shí),一般對象變量是很有用的。例如,如果要書寫代碼,并使之在應(yīng)用程序的任何窗體中都可操作,則必須使用一般窗體變量。
注意 由于應(yīng)用程序中只能有一個 mdi 窗體,因此不必使用一般的 mdiform 類型。無論何時(shí),一旦需要聲明引用 mdi 窗體的窗體變量,就可用特定的 mdiform 類型(或者是 mdiform1,或者是對 mdi 窗體的 name 屬性指定的任何名稱),而不用一般的 mdiform 類型。實(shí)際上,由于在運(yùn)行應(yīng)用程序前,visual basic 就能夠決定引用特定窗體類型的屬性和方法,因此總應(yīng)使用特定的 mdiform 類型。
只是出于完整性的考慮才提供一般的 mdiform 類型;在 visual basic 的今后版本中,單個應(yīng)用程序中可以擁有多個 mdi 窗體,這將是非常有用的。
作為對象的窗體
窗體最常用到的是構(gòu)造應(yīng)用程序界面,但也常常是應(yīng)用程序中其它模塊調(diào)用的對象。窗體與類模塊關(guān)系密切。兩者之間的主要區(qū)別在于,窗體是可視對象,而類模塊卻沒有可視界面。
添加自定義方法和屬性
可對窗體添加自定義方法和屬性,并可從應(yīng)用程序中的其它模塊訪問它們。為了創(chuàng)建窗體的新方法,請?zhí)砑佑?public 聲明的過程。
‘自定義 form1 的方法。
public sub latejobscount ()
   .
. ’
   .
end sub
可用下面這個語句從其它模塊調(diào)用 latejobscount 過程:
form1.latejobscount
創(chuàng)建窗體的新屬性就象在窗體模塊中聲明一個公用變量那樣簡單:
public idnumber as integer
可用下面兩個語句從其它模塊設(shè)置和返回 form1 的 idnumber 值:
form1.idnumber = 3
text1.text = form1.idnumber
也可用 property 過程向窗體添加自定義屬性。
詳細(xì)信息 “用對象編程”提供了 property 過程的詳細(xì)材料。
注意 不必加載窗體就可調(diào)用窗體的變量或自定義方法,還可設(shè)置窗體的自定義屬性。于是,不必將窗體加載到內(nèi)存就可運(yùn)行有關(guān)窗體的代碼。同樣,引用控件而不引用其屬性或方法時(shí)也不會加載窗體。
使用 new 關(guān)鍵字
用 new 關(guān)鍵字創(chuàng)建新對象,這個對象被視為它的類所定義的對象??捎?new 創(chuàng)建集合、窗體的實(shí)例以及類模塊中定義的類。
在窗體上使用 new 關(guān)鍵字
在設(shè)計(jì)時(shí)創(chuàng)建的窗體是類。可用 new 關(guān)鍵字創(chuàng)建這個類的新實(shí)例。為了看到這一工作過程,請?jiān)诖绑w上畫出一個命令按鈕和其它幾個控件。在“屬性”窗口中將窗體的 name 屬性設(shè)置成 sample。在命令按鈕的 click 事件過程中添加下列代碼:
dim x as new sample
x.show
運(yùn)行應(yīng)用程序,并單擊命令按鈕數(shù)次。把最前面的窗體移到一邊。因?yàn)榇绑w是具有可視界面的類,所以可看到附加副本。每個窗體在相同位置上都有相同控件,而且這些位置也正是窗體在設(shè)計(jì)時(shí)的位置。
注意 要使窗體變量和已加載窗體的實(shí)例一直存在,請用 static 或 public 變量,而不要用局部變量。
也可將 new 關(guān)鍵字與 set 語句并用。請?jiān)囉妹畎粹o的 click 事件過程中的代碼:
dim f as form1
set f = new form1
f.caption = “hello”
f.show
將 new 關(guān)鍵字和 set 語句并用會加快運(yùn)行速度,因此,這種方法值得推薦。
對其它對象使用 new 關(guān)鍵字
可用 new 關(guān)鍵字從類模塊中定義的類創(chuàng)建集合和對象。試用下例說明這一工作過程。
此例說明了 new 關(guān)鍵字是如何創(chuàng)建類的實(shí)例的。打開新工程,在 form1 上畫出一個 commandbutton 控件。從“工程”菜單中選擇“添加類模塊”命令,從而在工程中添加一個類模塊。設(shè)置類模塊的 name 屬性為 showme 。
form1 中的下列代碼創(chuàng)建了類 showme 的新實(shí)例,還調(diào)用了包含在類模塊中的過程。
public clsnew as showme
private sub command1_click ()
   set clsnew = new showme
   clsnew.showfrm
end sub
類模塊中的 showfrm 過程創(chuàng)建類 form1 的新實(shí)例,顯示窗體,然后使其最小化。
sub showfrm ()
   dim frmnew as form1
   set frmnew = new form1
   frmnew.show
   frmnew.windowstate = 1
end sub
為了應(yīng)用這個例子,請運(yùn)行應(yīng)用程序并單擊命令按鈕數(shù)次。在創(chuàng)建 showme 類的每一個新實(shí)例時(shí)將看到最小化的窗體圖標(biāo)出現(xiàn)在桌面上。
詳細(xì)信息 關(guān)于利用 new 創(chuàng)建對象的信息,請參閱“用部件編程”。
new 關(guān)鍵字的限制
下表說明不能用 new 關(guān)鍵字做什么。
不能用 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

釋放對對象的引用
每個對象都使用內(nèi)存和系統(tǒng)資源。當(dāng)不再使用對象時(shí)及時(shí)釋放這些資源,這是良好的編程習(xí)慣。
用 unload 從內(nèi)存中卸載窗體或控件。

用 nothing 釋放對象變量占用的資源。用 set 語句將 nothing 賦予對象變量。
詳細(xì)信息 請參閱語言參考中的“unload 事件”和“nothing”部分。
給過程傳遞對象
可在 visual basic 中將對象傳遞給過程。在下面的代碼例子中假定窗體中有一 commandbutton 控件:
private sub command1_click ()
   ‘調(diào)用 demo 子過程,并將窗體傳遞給它。
   demo form1
end sub
private sub demo (x as form1)
   ’在屏幕中使窗體居中。
   x.left = (screen.width – x.width) / 2
end sub
可以通過引用把對象傳遞給參數(shù),然后在過程內(nèi)將參數(shù)設(shè)置成新對象。為了看到這一工作過程,打開工程并插入第二個窗體。在每個窗體中安放一個圖片框。需要改變的屬性設(shè)置值如下表所示:
對象 屬性 設(shè)置
form2 上的 圖片框 name
picture
picture2
c:\vb\icons\arrows\arw01dn.ico

form1_click 事件過程調(diào)用 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)
   ‘將傳遞進(jìn)來的圖片框賦予對象變量。
   set objx = x
   ’將 picture 屬性值賦予 form1 的圖片框。
   objx.picture = picture2.picture
end sub
為了應(yīng)用這個例子,請運(yùn)行程序并單擊 form1。在 form1 的圖片框中將看到出現(xiàn)了 form2 中的圖標(biāo)。
詳細(xì)信息 上述主題意在概述對象。更詳細(xì)內(nèi)容,請參閱“用對象編程”和“用部件編程”。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多