VB編程基礎–進階變數主題

來源:互聯網
上載者:User

使用多個同名的變數
如果不同模組中的公用變數使用同一名字,則通過同時引用模組名和變數名就可以在代碼中區分它們。例如,如果有一個在 Form1 和 Module1 中都聲明了的公用 Integer 變數 intX,則把它們作為 Module1.intX 和 Form1.intX 來引用便得到正確值。

為了看清這是如何工作的,在一個新工程中插入兩個標準模組,並在表單上畫上三個命令按鈕。

在第一個標準模組 Module1 之中聲明一個變數 intX。Test 過程設定它的值:

Public intX As Integer      '聲明 Module1 的 intX。
Sub Test ()
  '設定 Module1 的 intX 變數的值。
  intX = 1  
End Sub

在第二個標準模組 Module2 中聲明了第二個變數 intX,它有相同的名字。又是名為 Test 的過程設定它的值:

Public intX As Integer      '聲明了 Module2 的 intX。
Sub Test ()
  '設定 Module2 的 intX 變數的值。
  intX = 2  
End Sub

在表單模組中聲明了第三個變數 intX。名為 Test 的過程又一次設定它的值。

Public intX As Integer      '聲明了該表單的 intX 變數。
Sub Test ()
  ' 設定 form 中的 intX 變數值。
  intX = 3
End Sub

在三個命令按鈕的 Click 事件程序中,每一個都調用了相應的 Test 過程,並用 MsgBox 來顯示這三個變數的值。

Private Sub Command1_Click ()
  Module1.Test               ' 調用 Module1 中的 Test。
  MsgBox Module1.intX         ' 顯示 Module1 的 intX。
End Sub

Private Sub Command2_Click ()
  Module2.Test               ' 調用 Module2 中的 Test。
  MsgBox Module2.intX         ' 顯示 Module2 的 intX。
End Sub

Private Sub Command3_Click ()
  Test                     ' 調用 Form1 中的 Test。
  MsgBox intX               ' 顯示 Form1 的 intX。
End Sub

運行應用程式,單擊三個命令按鈕中的每一個按鈕。於是將看到三個公用變數被分別引用。注意在第三個命令按鈕的 Click 事件程序中,在調用 Form1 的 Test 過程時不必指定 Form1.Test,在調用 Form1 的 Integer 變數的值時也不必指定 Form1.intX 。如果多個過程或變數同名,則 Visual Basic 會取變化更受限制的值,在這個例子中,就是 Form1 變數。

公用變數與局部變數的比較
在不同的範圍內也可有同名的變數。例如,可有名為 Temp 的公用變數,然後在過程中聲明名為 Temp 的局部變數。在過程內通過引用名字 Temp 來訪問局部變數;而在過程外則通過引用名字 Temp 來訪問公用變數。通過用模組名限定模組層級變數就可在過程內訪問這樣的變數。

Public Temp As Integer
Sub Test ()
  Dim Temp As Integer
  Temp = 2                  ' Temp 的值為 2。
  MsgBox Form1.Temp         ' Form1.Temp 的值為 1。
End Sub

Private Sub Form_Load ()
  Temp = 1                  ' 將 Form1.Temp 的值設定成 1。
End Sub
Private Sub Command1_Click ()
  Test  
End Sub

一般說來,當變數名稱相同而範圍不同時,局限性大的變數總會用“陰影”遮住局限性不太大的變數(即優先訪問局限性大的變數)。所以,如果還有名為 Temp 的程序層級變數,則它會用“陰影”遮住模組內部的公用變數 Temp。

陰影表單內容和控制項
由於陰影效應,表單內容、控制項、常數和過程皆被視為表單模組中的模組層級變數。表單內容或控制項的名稱與模組層級變數、常數、自訂類型或過程的名稱相同是不合法的,因為它們的範圍相同。

在表單模組內,和表單中控制項同名的局部變數將遮住同名控制項。因此必須引用表單名稱或 Me 關鍵字來限定控制項,才能設定或者得到該控制項的值或它的屬性值。例如:

Private Sub Form_Click ()
Dim Text 1 , BackColor
'假定該表單有一個控制項也叫做 Text1。
  Text1 = "Variable"       '變數用“陰影”遮住控制項。
  Me.Text1 = "Control"       '要得到控制項,必須用‘Me’限定。
  Text1.Top = 0          '導致出錯!
  Me.Text1.Top = 0       '要得到控制項,必須用‘Me’限定。
  BackColor = 0          '變數用“陰影”遮住屬性。
  Me.BackColor = 0       '要得到表單內容,必須用‘Me’限定。
End Sub

使用同名的變數和過程
專用模組層級變數和公用模組層級變數的名字也會和過程名衝突。模組中的變數不能和任何過程同名,也不能和模組中定義的類型同名。但可以和公用過程或其它模組中定義的類型或變數同名。在這種情況下,從別的模組訪問這個變數時,就必須用模組名來限定。

雖然上面討論陰影規則並不複雜,但是用陰影的方法可能會帶來麻煩,而且會導致難以尋找的錯誤。因此,對不同的變數使用不同的名稱才是一種好的編程習慣。在表單模組中應盡量使變數名和表單中的控制項名不一樣。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.