2.1 VB用戶界面設(shè)計(jì)基礎(chǔ)
1. 概述
界面的設(shè)計(jì)有兩步:先繪制控件,然后確定控件屬性。
繪制控件:在工具箱里單擊想畫的控件,在窗體里按下鼠標(biāo)并拖曳,然后松開鼠標(biāo)即可。確定屬性:先選中控件,然后按F4鍵或單擊工具欄上的屬性窗口進(jìn)入屬性(Properties)窗口,再在屬性窗口中找到要設(shè)置的屬性并進(jìn)行設(shè)置。
2. 常用屬性的設(shè)置
(1)Name屬性
對象都有名字,計(jì)算機(jī)把名字看成對象于對象之間的根本差異,因此在同一窗體里不許出現(xiàn)重名的情況(除非這是一個(gè)控件數(shù)組),且名字不得超過40個(gè)字。
在簡單的程序里,給控件命名不是很必要,完全可以使用控件Name屬性的缺省值。例如Text1。但在有幾十個(gè)控件的復(fù)雜窗體里,就很難區(qū)分它們。所以,VB推薦由三個(gè)小寫字母的前綴和一個(gè)第一個(gè)字母為大寫的描述性單詞組成的名字。例如cmdMyButton是一個(gè)命令按鈕(前綴是cmd)
(2)Caption屬性
Caption即標(biāo)題,是可以在對象外觀上直接看見的文本,可以長達(dá)255字符,包括空格和標(biāo)點(diǎn)符號,比如一個(gè)叫cmdOk的命令鈕,它的Caption屬性就可以是“Ok”。 注意:并不是所有的對象都有此屬性,比如文本框、圖片框、線條等就沒有。
為按鈕設(shè)置熱鍵:在設(shè)置Caption屬性時(shí),在需要加下劃線的字母前加上 “&” 符號,例如 “&File”,輸出的就是“File”,這樣就可以通過按ALT鍵和標(biāo)題上那個(gè)帶下劃線的字母來選取它了, 不必為此編任何代碼。
Name和 caption的比較:
1) Name是系統(tǒng)用來識別對象的,編程時(shí)需要用它來指代各對象;Caption是給用戶看的,提示用戶該對象的作用;
2) Name可以采用系統(tǒng)默認(rèn)的名稱,但Caption應(yīng)該根據(jù)實(shí)際情況改成意義明了的名詞;
3)所有對象都有Name,但不一定都有Caption;
(3)Top,Left屬性
這兩個(gè)屬性決定對象的位置。只有兩種情況需要在屬性窗口里設(shè)置這兩個(gè)屬性:第一種是用戶沒有鼠標(biāo),第二種是程序員需要十分精確地設(shè)定這兩個(gè)值。當(dāng)選中對象,單擊并拖曳它的時(shí)候,便在修改這兩個(gè)值了。
(4)Height,Width屬性
這兩個(gè)屬性決定了對象的大小,當(dāng)選中控件時(shí),它周圍出現(xiàn)八個(gè)小黑方塊,把鼠標(biāo)指向這些方塊,鼠標(biāo)指針將變成一個(gè)雙向的箭頭,這時(shí)按下鼠標(biāo)并拖曳它,即可改變控件的大小,也就改變了Height,Width屬性。
1. 窗體的屬性
(1)設(shè)置屬性的方法
1)在設(shè)計(jì)態(tài)通過屬性窗口設(shè)置
直接在屬性窗口中選擇或輸入既可。
2)在程序代碼中改變屬性值
代碼中的格式為: 對象名 . 屬性 = 屬性值
例:Form1.BackColor=RGB(255,0,0)
2. 窗體的常用方法
(1)Hide方法
用以隱藏 MDIForm 或 Form 對象,但不能使其卸載。
語法:object.Hide
object 所在處代表一個(gè)對象表達(dá)式,其值為“應(yīng)用于”列表中的一個(gè)對象。如果省略 object,則帶有焦點(diǎn)的窗體就認(rèn)為是該 object。
說明:
隱藏窗體時(shí),它就從屏幕上被刪除,并將其 Visible 屬性設(shè)置為 False。 用戶將無法訪問隱藏窗體上的控件,但是對于運(yùn)行中的 Visual Basic 應(yīng)用程序,或?qū)τ谕ㄟ^ DDE 與該應(yīng)用程序通訊的進(jìn)程及對于 Timer 控件的事件,隱藏窗體的控件仍然是可用的。
窗體被隱藏時(shí),用戶只有等到被隱藏窗體的事件過程的全部代碼執(zhí)行完后才能夠與該應(yīng)用程序交互。
如果調(diào)用 Hide 方法時(shí)窗體還沒有加載,那么 Hide 方法將加載該窗體但不顯示它。
(2)Move方法
用以移動 MDIForm、Form 或控件。
語法:object . Move left, top, width, height
說明:只有 left 參數(shù)是必須的。但是,要指定任何其它的參數(shù),必須先指定出現(xiàn)在語法中該參數(shù)前面的全部參數(shù)。例如,如果不先指定 left 和 top 參數(shù),則無法指定 width 參數(shù)。任何沒有指定的尾部的參數(shù)則保持不變。
(3)Print 方法
在 Immediate 窗口中顯示文本。
語法:object . Print [outputlist]
Print 方法的語法具有下列對象限定符和部分:
outputlist 參數(shù)具有以下語法和部分:
{Spc(n) | Tab(n)} expression charpos
說明:
可以用空白或分號來分隔多個(gè)表達(dá)式。
對系統(tǒng)指定的國別設(shè)置,用小數(shù)點(diǎn)分隔符將所有打印到 Immediate 視窗的數(shù)據(jù)正確格式化。關(guān)鍵字要用適用于主應(yīng)用程序的語言輸出。
對于 Boolean 數(shù)據(jù),或者打印 True 或者打印 False。根據(jù)主機(jī)應(yīng)用程序的地區(qū)設(shè)置來翻譯 True 和 False 關(guān)鍵字。
使用系統(tǒng)能識別的標(biāo)準(zhǔn)短日期格式書寫 Date 數(shù)據(jù)。當(dāng)日期或時(shí)間部件丟失或?yàn)榱銜r(shí),只書寫已提供的部件。
如果 outputlist 數(shù)據(jù)是 Empty,則無內(nèi)容可寫。但是,如果 outputlist 數(shù)據(jù)是 Null,則輸出 Null。在輸出 Null 關(guān)鍵字時(shí),要把關(guān)鍵字正確翻譯出來。
要把錯(cuò)誤數(shù)據(jù)作為 Error errorcode 輸出。在輸出 Error 關(guān)鍵字時(shí),要把關(guān)鍵字正確翻譯出來。
如果在具有缺省顯示空間的模塊外使用此方法,則需要 object。例如,如果沒有指定對象就在標(biāo)準(zhǔn)模塊上調(diào)用此方法,則將導(dǎo)致錯(cuò)誤發(fā)生,但是,如果在窗體模塊上進(jìn)行調(diào)用,則會在窗體上顯示“outputlist”。
注意: 因?yàn)?Print 方法是按照字符比例進(jìn)行打印,所以字符數(shù)與字符所占據(jù)的寬度固定的列的數(shù)目無關(guān)。例如,像 “W” 這樣的寬字母占據(jù)的寬度超過一固定列寬,而像 "i" 這樣的窄字母占據(jù)的寬度則較小??紤]到要使用比平均字符更寬的空間,表列一定要留有足夠余地。另外,也可以使用固定間距的字體(像 Courier 字體)來確保每一字符均只占一列。
(4)Print From方法
用以將 Form 對象的圖象逐位發(fā)送給打印機(jī)。
語法:object.PrintForm
說明:Print Form 將打印 Form 對象的全部可見對象和位圖。在繪制圖形時(shí),如果 Auto Redraw 屬性為 True,則在運(yùn)行時(shí)Print Form 將打印 Form 對象或 Picture Box 控件上的圖形。
Print Form 所使用的打印機(jī)是由操作系統(tǒng)的控制面板中的設(shè)置來決定。
(5) Refresh方法
強(qiáng)制全部重繪一個(gè)窗體或控件。
語法:object. Refresh
說明:在下列情況下使用 Refresh 方法:
在另一個(gè)窗體被加載時(shí)顯示一個(gè)窗體的全部。
更新諸如 FileListBox 控件之類的文件系統(tǒng)列表框的內(nèi)容。
更新 Data 控件的數(shù)據(jù)結(jié)構(gòu)。
Refresh 方法不能用于 MDI 窗體,但能用于 MDI 子窗體。不能在 Menu 或 Timer 控件上使用 Refresh 方法。
通常,如果沒有事件發(fā)生,窗體或控件的繪制是自動處理的。但是,有些情況下希望窗體或控件立即更新。例如,如果使用文件列表框、目錄列表框或者驅(qū)動器列表框顯示當(dāng)前的目錄結(jié)構(gòu)狀態(tài),當(dāng)目錄結(jié)構(gòu)發(fā)生變化時(shí)可以使用 Refresh 更新列表。
可以在 Data 控件上使用 Refresh 方法來打開或重新打開數(shù)據(jù)庫(如果 DatabaseName, ReadOnly, Exclusive 或 Connect 屬性的設(shè)置值發(fā)生改變),并能重建控件的 Recordset 屬性內(nèi)的 dynaset。
(6)Show方法
用以顯示 MDIForm 或 Form 對象。
語法:object.Show style, ownerform
說明:
如果調(diào)用 Show 方法時(shí)指定的窗體沒有裝載,Visual Basic 將自動裝載該窗體。
當(dāng) Show 在顯示無模式窗體時(shí),隨后遇到的代碼則要執(zhí)行。當(dāng) Show 在顯示模式窗體 (modal form) 時(shí),則隨后的代碼直到該窗體被隱藏或卸載時(shí)才能執(zhí)行。
當(dāng) Show 在顯示模式窗體時(shí),除了模式窗體中的對象之外不能進(jìn)行輸入(鍵盤或鼠標(biāo)單擊)。對其它窗體進(jìn)行輸入前程序必須隱藏或卸載模式窗體(通常是處于響應(yīng)用戶某些操作狀態(tài))。MDIForm 不能是形式的。
在模式窗體顯示時(shí),雖然應(yīng)用程序中的其它窗體失效,但其它應(yīng)用程序不會失效。
應(yīng)用程序的啟動窗體在其 Load 事件調(diào)用后會自動出現(xiàn)。
下面的例子說明如何使用ownerform 參數(shù):
Private Sub cmdShowResults_Click()
' 顯示模式窗體 frmResults.
frmResults.Show vbModal, Me
End Sub
(7)Cls方法
清除運(yùn)行時(shí) Form 或 Picture Box 所生成的圖形和文本。
語法:object.Cls
說明:
Cls 將清除圖形和打印語句在運(yùn)行時(shí)所產(chǎn)生的文本和圖形,而設(shè)計(jì)時(shí)在 Form 中使用 Picture 屬性設(shè)置的背景位圖和放置的控件不受 Cls 影響。如果激活 Cls 之前 Auto Redraw 屬性設(shè)置為 False, 調(diào)用時(shí)該屬性設(shè)置為 True,則放置在 Form 或 Picture Box 中的圖形和文本也不受影響。 這就是說,通過對正在處理的對象的 Auto Redraw 屬性進(jìn)行操作,可以保持 Form 或 Picture Box 中的圖形和文本。
調(diào)用 Cls 之后,object 的 CurrentX 和 CurrentY 屬性復(fù)位為 0。
3.窗體的常用事件
(1) Load事件
這個(gè)事件發(fā)生在窗體被裝入內(nèi)存時(shí),且發(fā)生在窗體出現(xiàn)在屏幕之前。窗體出現(xiàn)之前,Visual Basic會看一看Load事件里有沒有代碼,如果有,那么它先執(zhí)行這些代碼,再讓窗體出現(xiàn)在屏幕上。
(2) Click事件,Dblclick事件
這兩個(gè)事件在單擊或雙擊窗體時(shí)發(fā)生。不過單擊窗體里的控件時(shí),窗體的Click事件并不會發(fā)生,Visual Basic會去看控件的Click事件里有沒有代碼。
(3)Activate (活動事件)與Deactivate(非活動事件)
顯示多個(gè)窗體時(shí),可以從一個(gè)窗體切換到另一個(gè)窗體。每次激活一個(gè)窗體時(shí),發(fā)生Activate 事件,而前一個(gè)窗體發(fā)生Deactivate事件。
(4)Resize事件
在窗體被改變大小時(shí)會觸發(fā)此事件。
4.窗體的控制
(1) 裝入或卸出窗體
要裝入或卸出窗體,用Load 或Unload語句。
裝入窗體: Load formName
卸出窗體: UnLoad formName
FormName變量是要裝入或卸出的窗體名。 Load語句只是把窗體裝入內(nèi)存,并不顯示出來,要顯示窗體可以使用窗體的Show方法。
(2) 顯示或隱藏窗體
要顯示或隱藏窗體,用Show或Hide方法。若尚未裝入內(nèi)存則先裝入再顯示。
顯示窗體: formName.show mode
隱藏窗體: formName.hide
FormName變量是窗體名,可選變元mode為0(缺省值)時(shí)窗體為非模態(tài),為1時(shí)窗體為模態(tài)。模態(tài)窗體完全占有應(yīng)用程序控制權(quán),不允許切換到別的應(yīng)用程序,除非關(guān)閉!而非模態(tài)窗體則反之。
(3)END語句
END語句的功能是終止應(yīng)用程序的執(zhí)行,并從內(nèi)存卸在所有窗體。
語法是: END