电竞比分网-中国电竞赛事及体育赛事平台

分享

VB編程基礎(chǔ)教程4–高級變量主題 | 異次元軟件世界

 a_cheng 2009-10-21

VB編程基礎(chǔ)教程4–高級變量主題

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

使用多個同名的變量
如果不同模塊中的公用變量使用同一名字,則通過同時引用模塊名和變量名就可以在代碼中區(qū)分它們。例如,如果有一個在 form1 和 module1 中都聲明了的公用 integer 變量 intx,則把它們作為 module1.intx 和 form1.intx 來引用便得到正確值。
為了看清這是如何工作的,在一個新工程中插入兩個標(biāo)準(zhǔn)模塊,并在窗體上畫上三個命令按鈕。
在第一個標(biāo)準(zhǔn)模塊 module1 之中聲明一個變量 intx。test 過程設(shè)置它的值:
public intx as integer      ‘聲明 module1 的 intx。
sub test ()
   ’設(shè)置 module1 的 intx 變量的值。
   intx = 1  
end sub
在第二個標(biāo)準(zhǔn)模塊 module2 中聲明了第二個變量 intx,它有相同的名字。又是名為 test 的過程設(shè)置它的值:
public intx as integer      ‘聲明了 module2 的 intx。
sub test ()
   ’設(shè)置 module2 的 intx 變量的值。
   intx = 2  
end sub
在窗體模塊中聲明了第三個變量 intx。名為 test 的過程又一次設(shè)置它的值。
public intx as integer      ‘聲明了該窗體的 intx 變量。
sub test ()
   ’ 設(shè)置 form 中的 intx 變量值。
   intx = 3
end sub
在三個命令按鈕的 click 事件過程中,每一個都調(diào)用了相應(yīng)的 test 過程,并用 msgbox 來顯示這三個變量的值。
private sub command1_click ()
   module1.test               ‘ 調(diào)用 module1 中的 test。
   msgbox module1.intx         ’ 顯示 module1 的 intx。
end sub
private sub command2_click ()
   module2.test               ‘ 調(diào)用 module2 中的 test。
   msgbox module2.intx         ’ 顯示 module2 的 intx。
end sub
private sub command3_click ()
   test                     ‘ 調(diào)用 form1 中的 test。
   msgbox intx               ’ 顯示 form1 的 intx。
end sub
運行應(yīng)用程序,單擊三個命令按鈕中的每一個按鈕。于是將看到三個公用變量被分別引用。注意在第三個命令按鈕的 click 事件過程中,在調(diào)用 form1 的 test 過程時不必指定 form1.test,在調(diào)用 form1 的 integer 變量的值時也不必指定 form1.intx 。如果多個過程或變量同名,則 visual basic 會取變化更受限制的值,在這個例子中,就是 form1 變量。
公用變量與局部變量的比較
在不同的范圍內(nèi)也可有同名的變量。例如,可有名為 temp 的公用變量,然后在過程中聲明名為 temp 的局部變量。在過程內(nèi)通過引用名字 temp 來訪問局部變量;而在過程外則通過引用名字 temp 來訪問公用變量。通過用模塊名限定模塊級變量就可在過程內(nèi)訪問這樣的變量。
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 的值設(shè)置成 1。
end sub
private sub command1_click ()
   test  
end sub
一般說來,當(dāng)變量名稱相同而范圍不同時,局限性大的變量總會用“陰影”遮住局限性不太大的變量(即優(yōu)先訪問局限性大的變量)。所以,如果還有名為 temp 的過程級變量,則它會用“陰影”遮住模塊內(nèi)部的公用變量 temp。
陰影窗體屬性和控件
由于陰影效應(yīng),窗體屬性、控件、常數(shù)和過程皆被視為窗體模塊中的模塊級變量。窗體屬性或控件的名稱與模塊級變量、常數(shù)、自定義類型或過程的名稱相同是不合法的,因為它們的范圍相同。
在窗體模塊內(nèi),和窗體中控件同名的局部變量將遮住同名控件。因此必須引用窗體名稱或 me 關(guān)鍵字來限定控件,才能設(shè)置或者得到該控件的值或它的屬性值。例如:
private sub form_click ()
dim text 1 , backcolor
’假定該窗體有一個控件也叫做 text1。
   text1 = “variable”       ‘變量用“陰影”遮住控件。
   me.text1 = “control”       ’要得到控件,必須用‘me’限定。
   text1.top = 0          ‘導(dǎo)致出錯!
   me.text1.top = 0       ’要得到控件,必須用‘me’限定。
   backcolor = 0          ‘變量用“陰影”遮住屬性。
   me.backcolor = 0       ’要得到窗體屬性,必須用‘me’限定。
end sub
使用同名的變量和過程
專用模塊級變量和公共模塊級變量的名字也會和過程名沖突。模塊中的變量不能和任何過程同名,也不能和模塊中定義的類型同名。但可以和公用過程或其它模塊中定義的類型或變量同名。在這種情況下,從別的模塊訪問這個變量時,就必須用模塊名來限定。
雖然上面討論陰影規(guī)則并不復(fù)雜,但是用陰影的方法可能會帶來麻煩,而且會導(dǎo)致難以查找的錯誤。因此,對不同的變量使用不同的名稱才是一種好的編程習(xí)慣。在窗體模塊中應(yīng)盡量使變量名和窗體中的控件名不一樣。

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多