程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB6 >> vb對象的使用(二)

vb對象的使用(二)

編輯:VB6

創建對象
創建對象的最簡單方法是在“工具箱”中雙擊控件。但是,對 Visual Basic 中的所有可用對象以及來自其它應用程序的所有可用對象,要想充分體現它們的優勢,可在運行時用 Visual Basic 的可編程性能創立對象。
1.用對象變量創建對象引用
2.用類模塊“從零開始”創建自己的對象
3.用集合對象創建自己的集合
詳細信息 在其它章節將會介紹如何訪問對象。例如,在第十章“用部件編程”中將討論 CreateObject 和 GetObject 函數。

使用對象變量
除了存儲值以外,變量可引用對象。如同給變量賦值一樣,基於下列相同理由,可把對象賦給變量:
1.變量名往往比變量所含的值(或者,在此情況下,所含值就是它們引用的對象)短而好記。
2.在運行代碼時,為了引用其它對象,應改變變量。
3.引用包含對象的變量比反復引用對象本身有更高的效率。
使用對象變量與使用常規變量一樣,只不過多了把對象賦予變量這一步:
4.首先聲明變量:
Dim variable As class
5.然後把對象賦予變量:
Set variable = object

聲明對象變量
聲明對象變量的方法和聲明其它變量一樣,要用 Dim、ReDim、Static、Private和 Public。僅有的不同在於可選的 New 關鍵字和 Class 參數,本章後面將會對 New 關鍵字和 Class 參數都作介紹。語法是:
{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 中有四種一般對象:

在不知道變量運行時是否引用特定類型的對象時,一般對象變量是很有用的。例如,如果要書寫代碼,並使之在應用程序的任何窗體中都可操作,則必須使用一般窗體變量。
注意 由於應用程序中只能有一個 MDI 窗體,因此不必使用一般的MDIForm 類型。無論何時,一旦需要聲明引用 MDI 窗體的窗體變量,就可用特定的 MDIForm 類型(或者是 MDIForm1,或者是對 MDI窗體的 Name 屬性指定的任何名稱),而不用一般的 MDIForm 類型。實際上,由於在運行應用程序前,Visual Basic 就能夠決定引用特定窗體類型的屬性和方法,因此總應使用特定的 MDIForm 類型。
只是出於完整性的考慮才提供一般的 MDIForm 類型;在 Visual Basic 的今後版本中,單個應用程序中可以擁有多個 MDI 窗體,這將是非常有用的。

作為對象的窗體
窗體最常用到的是構造應用程序界面,但也常常是應用程序中其它模塊調用的對象。窗體與類模塊關系密切。兩者之間的主要區別在於,窗體是可視對象,而類模塊卻沒有可視界面。

添加自定義方法和屬性
可對窗體添加自定義方法和屬性,並可從應用程序中的其它模塊訪問它們。為了創建窗體的新方法,請添加用 Public 聲明的過程。
'自定義 Form1 的方法。
Public Sub LateJobsCount ()
.
. ' <statements>
.
End Sub
可用下面這個語句從其它模塊調用 LateJobsCount 過程:
Form1.LateJobsCount
創建窗體的新屬性就像在窗體模塊中聲明一個公用變量那樣簡單:
Public IDNumber As Integer
可用下面兩個語句從其它模塊設置和返回 Form1 的 IDNumber 值:
Form1.IDNumber = 3
Text1.Text = Form1.IDNumber
也可用 Property 過程向窗體添加自定義屬性。
詳細信息 第九章“用對象編程”提供了 Property 過程的詳細材料。
注意 不必加載窗體就可調用窗體的變量或自定義方法,還可設置窗體的自定義屬性。於是,不必將窗體加載到內存就可運行有關窗體的代碼。同樣,引用控件而不引用其屬性或方法時也不會加載窗體。

使用 New 關鍵字
用 New 關鍵字創建新對象,這個對象被視為它的類所定義的對象。可用New 創建集合、窗體的實例以及類模塊中定義的類。

在窗體上使用 New 關鍵字
在設計時創建的窗體是類。可用 New 關鍵字創建這個類的新實例。為了看到這一工作過程,請在窗體上畫出一個命令按鈕和其它幾個控件。在“屬性”窗口中將窗體的 Name 屬性設置成 Sample。在命令按鈕的 Click 事件過程中添加下列代碼:
Dim x As New Sample
x.Show
運行應用程序,並單擊命令按鈕數次。把最前面的窗體移到一邊。因為窗體是具有可視界面的類,所以可看到附加副本。每個窗體在相同位置上都有相同控件,而且這些位置也正是窗體在設計時的位置。
注意 要使窗體變量和已加載窗體的實例一直存在,請用 Static 或 Public變量,而不要用局部變量。
也可將 New 關鍵字與 Set 語句並用。請試用命令按鈕的 Click 事件過程中的代碼:
Dim f As Form1
Set f = New Form1
f.Caption = "hello"
f.Show
將 New 關鍵字和 Set 語句並用會加快運行速度,因此,這種方法值得推薦。

對其它對象使用 New 關鍵字
可用 New 關鍵字從類模塊中定義的類創建集合和對象。試用下例說明這一工作過程。
此例說明了 New 關鍵字是如何創建類的實例的。打開新工程,在 Form1 上畫出一個 CommandButton 控件。從“工程”菜單中選擇“添加類模塊”命令,從而在工程中添加一個類模塊。設置類模塊的 Name 屬性為ShowMe 。
Form1 中的下列代碼創建了類 ShowMe 的新實例,還調用了包含在類模塊中的過程。
Public clsNew As ShowMe
Private Sub Command1_Click ()
Set clsNew = New ShowMe
clsNew.ShowFrm
End Sub
類模塊中的 ShowFrm 過程創建類 Form1 的新實例,顯示窗體,然後使其最小化。
Sub ShowFrm ()
Dim frmNew As Form1
Set frmNew = New Form1
frmNew.Show
frmNew.WindowState = 1
End Sub
為了應用這個例子,請運行應用程序並單擊命令按鈕數次。在創建 ShowMe類的每一個新實例時將看到最小化的窗體圖標出現在桌面上。
詳細信息 關於利用 New 創建對象的信息,請參閱第十章“用部件編程”。

New 關鍵字的限制
下表說明不能用New 關鍵字做什麼。

釋放對對象的引用
每個對象都使用內存和系統資源。當不再使用對象時及時釋放這些資源,這是良好的編程習慣。
用 Unload 從內存中卸載窗體或控件。
用 Nothing 釋放對象變量占用的資源。用 Set 語句將 Nothing 賦予對象變量。
詳細信息 請參閱《Visual Basic 6.0語言參考手冊》中的“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
可以通過引用把對象傳遞給參數,然後在過程內將參數設置成新對象。為了看到這一工作過程,打開工程並插入第二個窗體。在每個窗體中安放一個圖片框。需要改變的屬性設置值如下表所示:

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 的圖片框中將看到出現了 Form2 中的圖標。
詳細信息 上述主題意在概述對象。更詳細內容,請參閱第九章“用對象編程”和第十章“用部件編程”。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved