發新話題

Visual Basic 教學 - 《關於變數》進階變數主題

Visual Basic 教學 - 《關於變數》進階變數主題

多個同名變數的使用
如果不同模組中的公用變數使用了相同的名稱,則只要在引用時加上模組名稱與變數名稱就可以在程式碼中區分它們。舉例而言,如果有一個在 Form1 和 Module1 中都宣告的公用整數變數 intX,則您可以用 Module1.intXForm1.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 = 3End Sub在三個指令按鈕的 Click 事件程序中,每一個都呼叫了相對的 Test 程序,並用 MsgBox 來顯示這三個變數的值。
Private Sub Command1_Click ()   Module1.Test               ' 呼叫 Module1 中的 Test 程序。   MsgBox Module1.intX         ' 顯示 Module1 的 intX。End SubPrivate Sub Command2_Click ()   Module2.Test               ' 呼叫 Module2 中的 Test 程序。   MsgBox Module2.intX         ' 顯示 Module2 的 intX。End SubPrivate Sub Command3_Click ()   Test                     ' 呼叫 Form1 中的 Test 程序。   MsgBox intX               ' 顯示 Form1 的 intX。End Sub執行應用程式,並將三個指令按鈕都按一下。您將會看到對三個公用變數的不同引用。請注意在第三個指令按鈕的 Click 事件程序中,當呼叫 Form1 的 Test 程序時,您並不需指定 Form1.Test,而呼叫 Form1 中整數型態的變數值時,也不必指定 Form1.intX。如果多個程序或變數同名,則 Visual Basic 會取區域性較大的變數值,在這個例子中,就是 Form1 變數。
公用變數(Public variables)與區域變數(Private variables)
在不同的範圍內也可以有同名稱的變數。例如,您可以有名稱為 Temp 的公用變數,並在程序中宣告名稱為 Temp 的局部變數。在程序內引用名稱 Temp 將會存取局部變數;而在程序外引用名稱 Temp 將會存取公用變數。在程序內若要存取模組層次變數,您可以用模組名稱來限定此變數。
Public Temp As IntegerSub Test ()   Dim Temp As Integer   Temp = 2               ' Temp 的數值為 2。   MsgBox Form1.Temp      ' Form1.Temp 的數值為 1。End SubPrivate 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使用同名的變數和程序
私有模組層次變數和公用模組層次變數的名稱,也可能會和程序名稱衝突。模組中的變數無法和任何程序或在模組中定義的型態同名稱。但可以和其它模組中的公用程序、定義的型態或變數同名稱。在這種情況下,當從別的模組存取這個變數時,就必須用模組名稱來限定。
雖然上面討論的遮蔽規則並不複雜,但是用遮蔽的方法可能會帶來混淆,並且會導致難以察覺的錯誤。因此,對不同的變數使用不同的名稱才是一種好的程式撰寫習慣。在表單模組中應儘量讓變數名稱和表單中的控制項名稱不一樣。

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。