使用對象
在 Visual Basic中創(chuàng)建應(yīng)用程序之際,也就是和對象打交道之時(shí)了??梢允褂?Visual Basic 提供的對象, 比如控件、窗體和數(shù)據(jù)訪問對象。也可以在一個(gè) Visual Basic 應(yīng)用程序內(nèi)部控制另一個(gè)應(yīng)用程序?qū)ο?。甚至還可建立自己的對象,定義它們的屬性和方法。 對象是什么 對象是代碼和數(shù)據(jù)的組合,可以作為一個(gè)單位來處理。對象可以是應(yīng)用程序的一部分,比如可以是控件或窗體。整個(gè)應(yīng)用程序也是一個(gè)對象。下表列出了在 Visual Basic 中可能用到的幾種類型的對象: 對象從何而來Visual Basic 中的每個(gè)對象都是用類定義的。用餅干模子和餅干之間的關(guān)系作比喻,就會明白對象和它的類之間的關(guān)系。餅干模子是類。它確定了每塊餅干的特征,比如大小和形狀。用類創(chuàng)建對象。對象就是餅干。 下面再用兩個(gè)例子進(jìn)一步說明 Visual Basic 中類與對象之間的關(guān)系。 1.在 Visual Basic 的“工具箱”上,控件代表類。直到在窗體上畫出這些被稱作控件的對象為止,它們實(shí)際上并不存在。在創(chuàng)建控件之時(shí)也就是在復(fù)制控件類,或建立控件類的實(shí)例。這個(gè)類實(shí)例就是應(yīng)用程序中引用的對象。 2.在設(shè)計(jì)時(shí)操作的窗體是類。在運(yùn)行時(shí),Visual Basic 建立窗體的類實(shí)例。“屬性”窗口顯示Visual Basic應(yīng)用程序中的對象的類和Name屬性,如圖5.8所示。 把對象看作是類的原原本本的復(fù)制品,從而建立所有對象。一旦它們以單個(gè)對象的形式存在,屬性就可改變。例如,如果在窗體上畫了三個(gè)命令按鈕,則每個(gè)命令按鈕對象都是命令按鈕類的實(shí)例。 每個(gè)對象都具有一組由類定義的公共的特征和功能(屬性、方法和事件)。但是,每個(gè)對象都有自己的名字,都能分別設(shè)置成有效或無效,都能放在窗體的不同位置,等等。 為簡單起見,本章之外的大部分內(nèi)容將不過多引用對象的類。例如,只要記住術(shù)語“ListBox 控件”意味著“列表框類的一個(gè)實(shí)例”。
用對象能做什么 對象可提供現(xiàn)成代碼,省卻書寫麻煩。例如,可以自己創(chuàng)建打開文件和保存文件的對話框,但實(shí)際上大可不必。取而代之的是利用 Visual Basic 提供的 CommonDialog 控件(一個(gè)對象)。雖然用戶也能撰寫日程管理和資源管理的程序,但也大可不必。在此亦可使用 Microsoft Project 提供的Calendar、Resources 和 Task 對象。
Visual Basic 可以組合來自其它來源的對象 Visual Basic 提供了把來自不同資源的對象組合起來的工具?,F(xiàn)在可把Visual Basic 的各種強(qiáng)有力的特性以及支持自動(dòng)化(先前以 OLE 自動(dòng)化聞名)的應(yīng)用程序結(jié)合起來,建立定制的解決方法。自動(dòng)化是部件對象模式(COM) 的一個(gè)特性,它是應(yīng)用程序使用的工業(yè)標(biāo)準(zhǔn),用來陳列對象以開發(fā)工具和其它應(yīng)用程序。 可把 Visual Basic 內(nèi)部的控件結(jié)合在一起,也可使用其它應(yīng)用程序提供的對象??紤]把下列對象放入 Visual Basic 窗體: 1.Microsoft Excel Chart 對象 2.Microsoft Excel Worksheet 對象 3.Microsoft Word Document 對象 可用這些對象建立如圖 5.9 所示的支票簿應(yīng)用程序。由于不必書寫代碼,重建已由 Microsoft Excel 和 Word 等對象提供的功能,因而節(jié)省很多時(shí)間。
使用對象初步 Visual Basic 對象支持屬性、方法和事件。在 Visual Basic 中,稱對象的數(shù)據(jù)(設(shè)置和屬性)為屬性,稱各種可在對象上操作的過程為方法。事件是可被對象識別的動(dòng)作,例如單擊鼠標(biāo)和按下鍵盤鍵,還可編寫代碼來響應(yīng)事件。 改變對象的屬性就可改變對象的特性。用收音機(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 除了屬性以外,對象還有方法。方法和屬性都是對象的一部分。一般說來,方法就是要執(zhí)行的動(dòng)作,而屬性就是要設(shè)置或檢索的特性。以撥號打電話為例??梢哉f電話有一個(gè)“撥號”方法,撥一個(gè) 7 位電話號碼的語法就是: Phone.Dial 5551111 對象還有事件。當(dāng)對象的某方面有變動(dòng)時(shí)就觸發(fā)了事件。例如,收音機(jī)可能有“VolumeChange”事件。電話可能有“Ring”事件,等等。 用屬性控制對象 個(gè)別屬性隨著可以設(shè)置和取得它們的值的時(shí)間不同而不同。有的屬性可在設(shè)計(jì)時(shí)設(shè)置。可在“屬性”窗口設(shè)置這些屬性的值而無需編寫任何代碼。而有的屬性在設(shè)計(jì)時(shí)是不可用的;因此,這些屬性只有通過代碼在運(yùn)行時(shí)設(shè)置。 在運(yùn)行時(shí)可以設(shè)置并可獲得值的屬性叫做讀寫屬性。在運(yùn)行時(shí)只能讀取的屬性叫做只讀屬性。
設(shè)置屬性值 在想改變對象的外觀或特性時(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è)對象賦值)之前得知對象的狀態(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è)值存儲到一個(gè)變量中,則代碼執(zhí)行起來會更快。
用方法來執(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ù),就用逗號將它們分開。例如, Circle 方法就要用代表窗體上圓的位置、半徑和顏色的參數(shù): ' 畫一個(gè)半徑為 1200 緹的藍(lán)色圓。 Form1.Circle (1600, 1800), 1200, vbBlue 如果要保存方法的返回值,就必須把參數(shù)用括號括起來。例如, GetData 方法從剪貼板返回一張圖片: Picture = Clipboard.GetData (vbCFBitmap) 如果沒有返回值,則參數(shù)不會出現(xiàn)在括號中。例如,AddItem 方法沒有返回值。 List1.AddItem "yourname" ' 在列表框中添加 "yourname"。 詳細(xì)信息 關(guān)于 Visual Basic 對所有方法提供的語法和參數(shù),請參閱《VisualBasic 6.0語言參考手冊》。
對象之間的關(guān)系 在同一窗體上放置兩個(gè)命令按鈕時(shí),它們是兩個(gè)具有不同 Name 屬性設(shè)置值(Command1 和 Command2)的分開的對象,但都分享同一個(gè)類——命令按鈕。 它們也共享這樣一個(gè)特征,即它們在同一窗體上。在本章前面已看到,窗體上的控件也包含在窗體中。這就把控件放在一個(gè)層次上。要引用控件就必須先引用窗體,就如同打電話撥號一樣,首先要撥國家/地區(qū)號碼或區(qū)域號碼,然后再撥具體的電話號碼。 這兩個(gè)命令按鈕也共享這樣一個(gè)特征,即它們都是控件。所有控件都具有公共特性,使它們不同于窗體以及 Visual Basic 環(huán)境中的其它對象。以下章節(jié)中將說明 Visual Basic 如何用集合使相關(guān)的對象分組。
對象的層次 對象層次提供了一種組織結(jié)構(gòu),它決定了對象間的相互關(guān)系以及訪問它們的方法。在大多數(shù)情況下不必考慮 Visual Basic 對象的層次。但是: 1.在操作其它應(yīng)用程序的對象時(shí),應(yīng)當(dāng)熟悉那個(gè)應(yīng)用程序的對象層次。關(guān)于定位對象層次的信息,請參閱第十章“用部件編程”。 2.在使用數(shù)據(jù)訪問對象時(shí),應(yīng)當(dāng)熟悉數(shù)據(jù)訪問對象層次。在 Visual Basic 中,一個(gè)對象包含其它對象的一般情況時(shí)有發(fā)生。下面我們要詳細(xì)討論。
使用對象集合 集合對象有自己的屬性和方法。對象集合中的對象作為集合的成員被引用。集合中的每個(gè)成員從 0 開始順次編號;這就是成員的索引號。例如,控件集合包含已給定窗體上的所有控件 ,如圖 5.10 所示。如果對集合中的所有對象都必須執(zhí)行相同操作,則可用集合簡化代碼。 例如,下列代碼遍歷控件集合,并在列表框中列出每個(gè)成員的名字。 Dim MyControl as Control For Each MyControl In Form1.Controls '把每個(gè)控件的名字送到列表框。 List1.AddItem MyControl.Name Next MyControl
應(yīng)用集合成員的屬性與方法 有兩種通用方法可用來對集合對象成員尋址: 1.指定成員的名稱。以下兩個(gè)表達(dá)式等價(jià): Controls ("List1") Controls!List1 2.利用成員的索引號: Controls (3) 一旦能夠從整體上對全體成員尋址,而且還能夠個(gè)別地對單個(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
包含其它對象的對象 在 Visual Basic 中,一些對象包含其它對象。例如,窗體通常包含一個(gè)或數(shù)個(gè)控件。把一個(gè)對象當(dāng)作其它對象的容器,這樣做的好處在于,在代碼中引用容器即可明了要使用哪個(gè)對象。例如,圖 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è)對象包含其它對象的一般情況時(shí)有發(fā)生。下表簡要敘述 Visual Basic 中最常用的集合。 在 Visual Basic 中也可實(shí)現(xiàn)對象控制。 詳細(xì)信息 關(guān)于對象容器的詳細(xì)信息,請參閱第八章“再論編程”中的“使用集合替代數(shù)組”。關(guān)于打印機(jī)集合的信息,參閱第十二章“使用文本和圖形”。關(guān)于窗體集合和控件集合的詳細(xì)信息,請參閱《Visual Basic 6.0語言參考手冊》。
容器屬性在窗體內(nèi),可用 Container 屬性改變對象的容器。以下控件可包含其它控件: 1.Frame 控件 2.PictureBox 控件 3.ToolBar 控件(僅對專業(yè)版和企業(yè)版而言) 如何在窗體上將命令按鈕從一個(gè)容器移動(dòng)到另一個(gè)容器,該例對此作了演示。打開新工程,并在窗體上畫出 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ì)信息 請參閱《Visual Basic 6.0語言參考手冊》中的“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)用程序進(jìn)行通訊變得極為靈活。 詳細(xì)信息 關(guān)于使用其它應(yīng)用程序的對象及其通訊的詳細(xì)信息,請參閱第十章“用部件編程”。 創(chuàng)建對象 創(chuàng)建對象的最簡單方法是在“工具箱”中雙擊控件。但是,對 Visual Basic 中的所有可用對象以及來自其它應(yīng)用程序的所有可用對象,要想充分體現(xiàn)它們的優(yōu)勢,可在運(yùn)行時(shí)用 Visual Basic 的可編程性能創(chuàng)立對象。 1.用對象變量創(chuàng)建對象引用 2.用類模塊“從零開始”創(chuàng)建自己的對象 3.用集合對象創(chuàng)建自己的集合 詳細(xì)信息 在其它章節(jié)將會介紹如何訪問對象。例如,在第十章“用部件編程”中將討論 CreateObject 和 GetObject 函數(shù)。
使用對象變量 除了存儲值以外,變量可引用對象。如同給變量賦值一樣,基于下列相同理由,可把對象賦給變量: 1.變量名往往比變量所含的值(或者,在此情況下,所含值就是它們引用的對象)短而好記。 2.在運(yùn)行代碼時(shí),為了引用其它對象,應(yīng)改變變量。 3.引用包含對象的變量比反復(fù)引用對象本身有更高的效率。 使用對象變量與使用常規(guī)變量一樣,只不過多了把對象賦予變量這一步: 4.首先聲明變量: Dim variable As class 5.然后把對象賦予變量: 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 例如,可以聲明一個(gè)對象變量,它引用應(yīng)用程序中的被稱做 frmMain 的窗體: Dim FormVar As New frmMain '聲明一個(gè)類型為 frmMain '的對象變量。 也可以聲明一個(gè)對象變量,它引用應(yīng)用程序中的任何窗體: Dim anyForm As Form '一般窗體變量。 類似地,可以聲明一個(gè)對象變量,它能夠引用應(yīng)用程序中的任何文本框: Dim anyText As TextBox '可以引用任何文本框 '(但只能是一個(gè)文本框)。 還可以聲明一個(gè)對象變量,它能夠引用任何類型的控件: Dim anyControl As Control '一般控件變量。 注意,可以聲明一個(gè)引用應(yīng)用程序中的指定窗體的窗體變量,但不能聲引用特定控件的控件變量??梢月暶髂軌蛞每丶奶囟愋停ㄈ?TextBox或列表框)的控件變量,但不是引用那種類型的一個(gè)特定控件(如 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)用程序中的一個(gè)窗體(盡管可在該窗體的諸多實(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)行程序并單擊窗體。剛才放入窗體中的第三個(gè)控件的標(biāo)題將變成"Hello"。 Visual Basic 中有四種一般對象: 在不知道變量運(yùn)行時(shí)是否引用特定類型的對象時(shí),一般對象變量是很有用的。例如,如果要書寫代碼,并使之在應(yīng)用程序的任何窗體中都可操作,則必須使用一般窗體變量。 注意 由于應(yīng)用程序中只能有一個(gè) MDI 窗體,因此不必使用一般的MDIForm 類型。無論何時(shí),一旦需要聲明引用 MDI 窗體的窗體變量,就可用特定的 MDIForm 類型(或者是 MDIForm1,或者是對 MDI窗體的 Name 屬性指定的任何名稱),而不用一般的 MDIForm 類型。實(shí)際上,由于在運(yùn)行應(yīng)用程序前,Visual Basic 就能夠決定引用特定窗體類型的屬性和方法,因此總應(yīng)使用特定的 MDIForm 類型。 只是出于完整性的考慮才提供一般的 MDIForm 類型;在 Visual Basic 的今后版本中,單個(gè)應(yīng)用程序中可以擁有多個(gè) MDI 窗體,這將是非常有用的。
作為對象的窗體 窗體最常用到的是構(gòu)造應(yīng)用程序界面,但也常常是應(yīng)用程序中其它模塊調(diào)用的對象。窗體與類模塊關(guān)系密切。兩者之間的主要區(qū)別在于,窗體是可視對象,而類模塊卻沒有可視界面。
添加自定義方法和屬性 可對窗體添加自定義方法和屬性,并可從應(yīng)用程序中的其它模塊訪問它們。為了創(chuàng)建窗體的新方法,請?zhí)砑佑?Public 聲明的過程。 '自定義 Form1 的方法。 Public Sub LateJobsCount () . . ' <statements> . End Sub 可用下面這個(gè)語句從其它模塊調(diào)用 LateJobsCount 過程: Form1.LateJobsCount 創(chuàng)建窗體的新屬性就像在窗體模塊中聲明一個(gè)公用變量那樣簡單: Public IDNumber As Integer 可用下面兩個(gè)語句從其它模塊設(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)建新對象,這個(gè)對象被視為它的類所定義的對象??捎肗ew 創(chuàng)建集合、窗體的實(shí)例以及類模塊中定義的類。
在窗體上使用 New 關(guān)鍵字 在設(shè)計(jì)時(shí)創(chuàng)建的窗體是類??捎?New 關(guān)鍵字創(chuàng)建這個(gè)類的新實(shí)例。為了看到這一工作過程,請?jiān)诖绑w上畫出一個(gè)命令按鈕和其它幾個(gè)控件。在“屬性”窗口中將窗體的 Name 屬性設(shè)置成 Sample。在命令按鈕的 Click 事件過程中添加下列代碼: Dim x As New Sample x.Show 運(yùn)行應(yīng)用程序,并單擊命令按鈕數(shù)次。把最前面的窗體移到一邊。因?yàn)榇绑w是具有可視界面的類,所以可看到附加副本。每個(gè)窗體在相同位置上都有相同控件,而且這些位置也正是窗體在設(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 上畫出一個(gè) CommandButton 控件。從“工程”菜單中選擇“添加類模塊”命令,從而在工程中添加一個(gè)類模塊。設(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)用這個(gè)例子,請運(yùn)行應(yīng)用程序并單擊命令按鈕數(shù)次。在創(chuàng)建 ShowMe類的每一個(gè)新實(shí)例時(shí)將看到最小化的窗體圖標(biāo)出現(xiàn)在桌面上。 詳細(xì)信息 關(guān)于利用 New 創(chuàng)建對象的信息,請參閱第十章“用部件編程”。
New 關(guān)鍵字的限制 下表說明不能用 New 關(guān)鍵字做什么。
釋放對對象的引用 每個(gè)對象都使用內(nèi)存和系統(tǒng)資源。當(dāng)不再使用對象時(shí)及時(shí)釋放這些資源,這是良好的編程習(xí)慣。 用 Unload 從內(nèi)存中卸載窗體或控件。 用 Nothing 釋放對象變量占用的資源。用 Set 語句將 Nothing 賦予對象變量。 詳細(xì)信息 請參閱《Visual Basic 6.0語言參考手冊》中的“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è)置成新對象。為了看到這一工作過程,打開工程并插入第二個(gè)窗體。在每個(gè)窗體中安放一個(gè)圖片框。需要改變的屬性設(shè)置值如下表所示: Form1_Click 事件過程調(diào)用 Form2 中的 GetPicture 過程,并把一個(gè)空的圖片框傳遞給它。 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)用這個(gè)例子,請運(yùn)行程序并單擊 Form1。在 Form1 的圖片框中將看到出現(xiàn)了 Form2 中的圖標(biāo)。 詳細(xì)信息 上述主題意在概述對象。更詳細(xì)內(nèi)容,請參閱第九章“用對象編程”和第十章“用部件編程”。
|