第二章 VB的界面設計
2.1 VB用戶界面設計基礎
1. 概述
界面的設計有兩步:先繪制控件,然后確定控件屬性。
繪制控件:在工具箱里單擊想畫的控件,在窗體里按下鼠標并拖曳,然后松開鼠標即可。確定屬性:先選中控件,然后按F4鍵或單擊工具欄上的屬性窗口進入屬性(Properties)窗口,再在屬性窗口中找到要設置的屬性并進行設置。
2. 常用屬性的設置
(1)Name屬性
對象都有名字,計算機把名字看成對象于對象之間的根本差異,因此在同一窗體里不許出現重名的情況(除非這是一個控件數組),且名字不得超過40個字。
在簡單的程序里,給控件命名不是很必要,完全可以使用控件Name屬性的缺省值。例如Text1。但在有幾十個控件的復雜窗體里,就很難區分它們。所以,VB推薦由三個小寫字母的前綴和一個第一個字母為大寫的描述性單詞組成的名字。例如cmdMyButton是一個命令按鈕(前綴是cmd)
推薦的前綴
對象 |
前綴 |
例子 |
確認框(Check Box) |
chk |
chkCareerChioce |
組合框(Combo Box) |
cbo |
cboCrimesCommitted |
命令鈕(Command Button) |
cmd |
cmdExit |
數據庫控件(Data Control) |
dat |
datTopSecretInfo |
目錄列表框(Directory List Box) |
dir |
dirTree |
驅動器列表框(Drive List Box) |
drv |
drvHardDisk |
文件列表框(File List Box) |
fil |
filDocuments |
窗體(Form) |
frm |
frm1040Tax |
框架(Frame) |
fra |
fraGroupButtons |
水平滾動條(Horizontal Scroll Bar) |
hsb |
hsbTemperature |
圖形(Image) |
img |
imgPrettyDrawing |
標簽(Label) |
lbl |
lblFakeName |
線(Line) |
lin |
linBorder |
列表框(List Box) |
lst |
lstCandidates |
菜單(Menu) |
mnu |
mnuHamAndEggs |
選項鈕(Option Button) |
opt |
optStation101 |
圖形框(Picture Box) |
pic |
picPrettyPicture |
幾何圖形(Shape) |
shp |
shpUpOrShipOut |
文本框(Text Box) |
txt |
txtWarning |
垂直滾動條(Vertical Scroll Bar) |
vsb |
vsbMoneyRaised |
(2)Caption屬性
Caption即標題,是可以在對象外觀上直接看見的文本,可以長達255字符,包括空格和標點符號,比如一個叫cmdOk的命令鈕,它的Caption屬性就可以是“Ok”。 注意:并不是所有的對象都有此屬性,比如文本框、圖片框、線條等就沒有。
為按鈕設置熱鍵:在設置Caption屬性時,在需要加下劃線的字母前加上 “&” 符號,例如 “&File”,輸出的就是“File”,這樣就可以通過按ALT鍵和標題上那個帶下劃線的字母來選取它了, 不必為此編任何代碼。
Name和 caption的比較:
1) Name是系統用來識別對象的,編程時需要用它來指代各對象;Caption是給用戶看的,提示用戶該對象的作用;
2) Name可以采用系統默認的名稱,但Caption應該根據實際情況改成意義明了的名詞;
3)所有對象都有Name,但不一定都有Caption;
(3)Top,Left屬性
這兩個屬性決定對象的位置。只有兩種情況需要在屬性窗口里設置這兩個屬性:第一種是用戶沒有鼠標,第二種是程序員需要十分精確地設定這兩個值。當選中對象,單擊并拖曳它的時候,便在修改這兩個值了。
(4)Height,Width屬性
這兩個屬性決定了對象的大小,當選中控件時,它周圍出現八個小黑方塊,把鼠標指向這些方塊,鼠標指針將變成一個雙向的箭頭,這時按下鼠標并拖曳它,即可改變控件的大小,也就改變了Height,Width屬性。
2.2 創建窗體
1. 窗體的屬性
(1) 常用屬性簡介
屬性 |
名稱 |
說明 |
Name |
窗體名稱 |
系統識別窗體的標識名,一個窗體名必須以一個字母開頭,可包含數字和下劃線,但不能包含空格和標點符號。 |
Caption |
窗體標題 |
出現在窗體標題欄中的文本內容 |
Icon |
窗體圖標 |
這個屬性是用戶經常要使用的一種屬性。當用戶的應用程序在工具條上最小化或在Windows桌面上變為一個獨立應用程序時,該屬性決定將采用何種圖標,窗體控制框里的圖標也由它決定。 |
BackColor |
窗體背景色 |
可以從屬性框里彈出調色板,選擇所需要的顏色 |
ForeColor |
窗體前景色 |
窗體上打印文字的顏色 |
BorderStyle |
邊框風格 |
這個屬性決定了窗體邊框的樣式,共有6種屬性值。改變窗體的BordrStyle屬性后,窗體在屏幕上沒有變化,它只在運行時才變為所要求的樣子。 |
Apearance |
外形 |
這個屬性用來決定控件是否采用三維效果 |
ControlBox |
控件按鈕控件按鈕 |
用來決定是否采用 控件框的屬性,僅在程序運行時才有效。 |
Font |
字體 |
用來改變該窗體上顯示信息的字體、字型和字號,它控制著直接在窗體上打印的文本顯示。 |
Visible |
可見性 |
該屬性決定窗體是否可見, 默認情況下是可見的。錯誤地改變其值是很危險的,窗體會從眼前消失, |
WindowState |
窗體狀態 |
指定窗體在運行時的三種狀態:正常、最小化、最大化。 |
Enabled |
活動性 |
默認值為True,決定窗體能否被訪問。 |
Left、Top、Height、Width |
左邊距、頂邊距、高度、寬度 |
決定窗體在屏幕上的位置及窗體大小。 |
(2)設置屬性的方法
1)在設計態通過屬性窗口設置
直接在屬性窗口中選擇或輸入既可。
2)在程序代碼中改變屬性值
代碼中的格式為: 對象名 . 屬性 = 屬性值
例:Form1.BackColor=RGB(255,0,0)
2. 窗體的常用方法
(1)Hide方法
用以隱藏 MDIForm 或 Form 對象,但不能使其卸載。
語法:object.Hide
object 所在處代表一個對象表達式,其值為“應用于”列表中的一個對象。如果省略 object,則帶有焦點的窗體就認為是該 object。
說明:
¨ 隱藏窗體時,它就從屏幕上被刪除,并將其 Visible 屬性設置為 False。 用戶將無法訪問隱藏窗體上的控件,但是對于運行中的 Visual Basic 應用程序,或對于通過 DDE 與該應用程序通訊的進程及對于 Timer 控件的事件,隱藏窗體的控件仍然是可用的。
¨ 窗體被隱藏時,用戶只有等到被隱藏窗體的事件過程的全部代碼執行完后才能夠與該應用程序交互。
¨ 如果調用 Hide 方法時窗體還沒有加載,那么 Hide 方法將加載該窗體但不顯示它。
(2)Move方法
用以移動 MDIForm、Form 或控件。
語法:object . Move left, top, width, height
Move 方法的語法包含下列部分:
部分 |
描述 |
object |
可選的。一個對象表達式,其值為“應用于”列表中的一個對象。如果省略 object,帶有焦點的窗體缺省為 object。 |
left |
必需的。單精度值,指示 object 左邊的水平坐標 (x-軸)。 |
top |
可選的。單精度值,指示 object 頂邊的垂直坐標 (y-軸)。 |
Width |
可選的。單精度值,指示 object 新的寬度。 |
height |
可選的。單精度值,指示 object 新的高度。 |
說明:只有 left 參數是必須的。但是,要指定任何其它的參數,必須先指定出現在語法中該參數前面的全部參數。例如,如果不先指定 left 和 top 參數,則無法指定 width 參數。任何沒有指定的尾部的參數則保持不變。
(3)Print 方法
在 Immediate 窗口中顯示文本。
語法:object . Print [outputlist]
Print 方法的語法具有下列對象限定符和部分:
部分 |
描述 |
object |
必需的。對象表達式,其值為“應用于”列表中的對象。 |
outputlist |
可選的。要打印的表達式或表達式的列表。如果省略,則打印一空白行。 |
outputlist 參數具有以下語法和部分:
{Spc(n) | Tab(n)} expression charpos
部分 |
描述 |
Spc(n) |
可選的。用來在輸出中插入空白字符,這里,n 為要插入的空白字符數。 |
Tab(n) |
可選的。用來將插入點定位在絕對列號上,這里,n 為列號。使用無參數的 Tab(n) 將插入點定位在下一個打印區的起始位置。 |
expression |
可選。要打印的數值表達式或字符串表達式。 |
Charpos |
可選。指定下個字符的插入點。使用分號 (;) 直接將插入點定位在上一個被顯示的字符之后。使用 Tab(n) 將插入點定位在絕對列號上。使用無參數的 Tab 將插入點定位在下一個打印區的起始位置。如果省略 charpos,則在下一行打印下一字符。 |
說明:
¨ 可以用空白或分號來分隔多個表達式。
¨ 對系統指定的國別設置,用小數點分隔符將所有打印到 Immediate 視窗的數據正確格式化。關鍵字要用適用于主應用程序的語言輸出。
¨對于 Boolean 數據,或者打印 True 或者打印 False。根據主機應用程序的地區設置來翻譯 True 和 False 關鍵字。
¨使用系統能識別的標準短日期格式書寫 Date 數據。當日期或時間部件丟失或為零時,只書寫已提供的部件。
¨ 如果 outputlist 數據是 Empty,則無內容可寫。但是,如果 outputlist 數據是 Null,則輸出 Null。在輸出 Null 關鍵字時,要把關鍵字正確翻譯出來。
¨ 要把錯誤數據作為 Error errorcode 輸出。在輸出 Error 關鍵字時,要把關鍵字正確翻譯出來。
¨如果在具有缺省顯示空間的模塊外使用此方法,則需要 object。例如,如果沒有指定對象就在標準模塊上調用此方法,則將導致錯誤發生,但是,如果在窗體模塊上進行調用,則會在窗體上顯示“outputlist”。
注意: 因為 Print 方法是按照字符比例進行打印,所以字符數與字符所占據的寬度固定的列的數目無關。例如,像 “W” 這樣的寬字母占據的寬度超過一固定列寬,而像 "i" 這樣的窄字母占據的寬度則較小?紤]到要使用比平均字符更寬的空間,表列一定要留有足夠余地。另外,也可以使用固定間距的字體(像 Courier 字體)來確保每一字符均只占一列。
(4)PrintFrom方法
用以將 Form 對象的圖象逐位發送給打印機。
語法:object.PrintForm
說明:PrintForm 將打印 Form 對象的全部可見對象和位圖。在繪制圖形時,如果 AutoRedraw 屬性為 True,則在運行時PrintForm 將打印 Form 對象或 PictureBox 控件上的圖形。
¨PrintForm 所使用的打印機是由操作系統的控制面板中的設置來決定。
(5) Refresh方法
強制全部重繪一個窗體或控件。
語法:object.Refresh
說明:在下列情況下使用 Refresh 方法:
¨在另一個窗體被加載時顯示一個窗體的全部。
¨更新諸如 FileListBox 控件之類的文件系統列表框的內容。
¨ 更新 Data 控件的數據結構。
Refresh 方法不能用于 MDI 窗體,但能用于 MDI 子窗體。不能在 Menu 或 Timer 控件上使用 Refresh 方法。
通常,如果沒有事件發生,窗體或控件的繪制是自動處理的。但是,有些情況下希望窗體或控件立即更新。例如,如果使用文件列表框、目錄列表框或者驅動器列表框顯示當前的目錄結構狀態,當目錄結構發生變化時可以使用 Refresh 更新列表。
可以在 Data 控件上使用 Refresh 方法來打開或重新打開數據庫(如果 DatabaseName, ReadOnly, Exclusive 或 Connect 屬性的設置值發生改變),并能重建控件的 Recordset 屬性內的 dynaset。
(6)Show方法
用以顯示 MDIForm 或 Form 對象。
語法:object.Show style, ownerform
Show 方法的語法包含下列部分:
部分 |
描述 |
object |
可選的。一個對象表達式,其值為“應用于”列表中的一個對象。如果省略 object,則與活動窗體模塊關聯的窗體缺省為 object。 |
Style |
可選的。一個整數,它用以決定窗體是模式還是無模式 。如果 style 為 0,則窗體是無模式的;如果 style 為 1,則窗體是模式的。 |
Ownerform |
可選的。字符串表達式,指出部件所屬的窗體被顯示。對于標準的Visual Basic 窗體,使用關鍵字 Me。 |
說明:
¨如果調用 Show 方法時指定的窗體沒有裝載,Visual Basic 將自動裝載該窗體。
¨當 Show 在顯示無模式窗體時,隨后遇到的代碼則要執行。當 Show 在顯示模式窗體 (modal form) 時,則隨后的代碼直到該窗體被隱藏或卸載時才能執行。
¨當 Show 在顯示模式窗體時,除了模式窗體中的對象之外不能進行輸入(鍵盤或鼠標單擊)。對其它窗體進行輸入前程序必須隱藏或卸載模式窗體(通常是處于響應用戶某些操作狀態)。MDIForm 不能是形式的。
¨在模式窗體顯示時,雖然應用程序中的其它窗體失效,但其它應用程序不會失效。
¨應用程序的啟動窗體在其 Load 事件調用后會自動出現。
下面的例子說明如何使用ownerform 參數:
Private Sub cmdShowResults_Click()
' 顯示模式窗體 frmResults.
frmResults.Show vbModal, Me
End Sub
(7)Cls方法
清除運行時 Form 或 PictureBox 所生成的圖形和文本。
語法:object.Cls
說明:
¨Cls 將清除圖形和打印語句在運行時所產生的文本和圖形,而設計時在 Form 中使用 Picture 屬性設置的背景位圖和放置的控件不受 Cls 影響。如果激活 Cls 之前 AutoRedraw 屬性設置為 False, 調用時該屬性設置為 True,則放置在 Form 或 PictureBox 中的圖形和文本也不受影響。 這就是說,通過對正在處理的對象的 AutoRedraw 屬性進行操作,可以保持 Form 或 PictureBox 中的圖形和文本。
¨調用 Cls 之后,object 的 CurrentX 和 CurrentY 屬性復位為 0。
3.窗體的常用事件
(1) Load事件
這個事件發生在窗體被裝入內存時,且發生在窗體出現在屏幕之前。窗體出現之前,Visual Basic會看一看Load事件里有沒有代碼,如果有,那么它先執行這些代碼,再讓窗體出現在屏幕上。
(2) Click事件,Dblclick事件
這兩個事件在單擊或雙擊窗體時發生。不過單擊窗體里的控件時,窗體的Click事件并不會發生,Visual Basic會去看控件的Click事件里有沒有代碼。
(3)Activate (活動事件)與Deactivate(非活動事件)
顯示多個窗體時,可以從一個窗體切換到另一個窗體。每次激活一個窗體時,發生Activate 事件,而前一個窗體發生Deactivate事件。
(4)Resize事件
在窗體被改變大小時會觸發此事件。
4.窗體的控制
(1) 裝入或卸出窗體
要裝入或卸出窗體,用Load 或Unload語句。
裝入窗體: Load formName
卸出窗體: UnLoad formName
FormName變量是要裝入或卸出的窗體名。 Load語句只是把窗體裝入內存,并不顯示出來,要顯示窗體可以使用窗體的Show方法。
(2) 顯示或隱藏窗體
要顯示或隱藏窗體,用Show或Hide方法。若尚未裝入內存則先裝入再顯示。
顯示窗體: formName.show mode
隱藏窗體: formName.hide
FormName變量是窗體名,可選變元mode為0(缺省值)時窗體為非模態,為1時窗體為模態。模態窗體完全占有應用程序控制權,不允許切換到別的應用程序,除非關閉!而非模態窗體則反之。
(3)END語句
END語句的功能是終止應用程序的執行,并從內存卸在所有窗體。語法是: END
2.3 控件
1. 常用控件介紹
(1)標準控件一
TextBox 文本框 |
Timer計時器 |
HscrollBar水平滾動條 |
ListBox列表框 |
Pointer 指針 |
VScrollBar 垂直滾動條 |
CheckBox 復選框 |
Label標簽 |
DirListBox 文件夾列表框 |
PictureBox圖片框 |
Line 線條 |
DriveListBox 驅動器列表框 |
ComboBox 組合框 |
Shape 圖形 |
FileListBox文件列表框 |
OptionButton選項按鈕 |
Image圖象 |
Data 數據控件 |
CommandButton 命令按鈕 |
Frame 框架 |
OLE控件 | |
|
|
(2) 常用控件的屬性、方法和事件
公共屬性 |
Name、Caption、Enabled、Fantsize、Height、Width、Index、Left、Top、 TabStop |
公共方法 |
Move、Refresh、Setfocus(設置焦點) |
公共事件 |
Click、DblClick、LostFocus(失去焦點) |
控件名稱 |
屬性、方法、事件 |
說明 |
|
TextBox 文本框
(用于接受用戶在框內輸入的內容) |
Text屬性 |
即用戶從文本框輸入的內容 |
|
PasswordChar屬性 |
設置口令時用的掩碼,如:用*代替實際輸入的內容 |
|
MaxLength屬性 |
最大長度,缺省值是0,即可以輸入任意個字符 |
|
MultiLine屬性 |
為True時可以多行文本,為False時只能輸入一行文本 |
|
Alignment 屬性 |
文本在框中的對齊方式:0=左對齊,1=右對齊,2=居中 |
|
Chang事件 |
當框中的文本內容發生變化時觸發該事件 |
|
LostFocus事件 |
當光標離開文本框時觸發該事件 |
|
Label 標簽(用于在窗體上添加文字說明) |
Alignment屬性 |
Caption文本的對齊方式:0=左對齊,1=右對齊,2=居中 |
|
WordWrap屬性 |
為True時可根據標簽大小自動換行 |
|
AutoSize屬性 |
自動調節大小,為True時可根據文本大小自動調整標簽大小,為False時標簽大小不能改變,過長的文本被截掉 |
|
ListBox 列表框
(用于列出可供用戶選擇的項目列表) |
List屬性 |
用于保存列表內容,訪問: [對象名]. List(列表項序號)
列表項的序號由上到下依次為0、1、2、3…… |
|
ListCount屬性 |
列表項數目 |
|
ListIndex屬性 |
列表項索引,其值為最后選中的列表項序號,第一個為0,如果未選中任何表項,其值為-1。 |
|
Text屬性 |
列表項正文,其值為最后選中的列表項的文本,它與
List(ListIndex)相同。 |
|
Columns屬性 |
列表框顯示形式取0時為一列顯示所有行,其他值為多列。 |
|
Sort屬性 |
排序屬性,為True時,列表項按ASCII碼排序,為False時,則不排序。 |
|
AddItem方法 |
添加列表項,使用格式:
[ 對象名.] AddItem<列表項文本>[,插入位置序號]
若不指定位置,則插入到列表末尾。 |
|
Clear方法 |
刪除列表所有項目 |
|
RemoveItem方法 |
刪除列表項,使用格式:
[ 對象名 .] RemoveItem 刪除項序號 |
|
PictureBox 圖片框
Image 圖象(用來把圖形放入程序里) |
AutoSize/Stretch
屬性 |
調整圖片框以適應圖象 / 調整圖象以適應外框 |
|
Picture屬性 |
決定控件中顯示的圖象 |
|
裝入圖形:
imgMyHand.Picture = LoadPicture ( “c:\graphics\hand.bmp” )
刪除圖形: imgMyHand.Picture = LoadPicture ( “ ” ) |
|
|
|
|
ComboBox 組合框(將列表框和文本框結合在一起) |
Style屬性 |
外觀屬性:取0時,系統創建一個帶下拉式列表框的組合框;為1時,系統創建一個由文本框和列表框直接組合在一起的簡單組合框,可以從列表框中選擇,也可以直接在文本框中輸入;為2時,系統創建一個沒有文本框的下拉式列表框,單擊列表框上的按鈕才顯示文本框,用戶不能在文本框中輸入,只能在列表框中選擇。 |
|
Text 屬性 |
其值為用戶從列表框中選定的文本或直接輸入的文本。 |
|
AddItem方法 |
添加列表項,使用格式:
[ 對象名.] AddItem<列表項文本>[,插入位置序號]
若不指定位置,則插入到列表末尾。 |
|
Clear方法 |
刪除列表所有項目 |
|
RemoveItem 方法 |
刪除列表項,使用格式:
[ 對象名 .] RemoveItem 刪除項序號 |
|
CommandButton
命令按鈕 |
Cancel屬性 |
取消屬性,它為True時, 按〖ESC〗即等于單擊此按鈕。 |
|
Default屬性 |
缺省屬性,它為True時, 按回車鍵即等于單擊此按鈕。 |
|
Timer計時器 |
Interval屬性 |
兩次調用Timer事件的事件間隔,用于創建動態效果。 |
|
Frame 框架
CheckBox 復選框
OptionButton選項按鈕 |
Alignment屬性 |
決定它們的對齊方式,0=左對齊,1=右對齊。 |
|
Value屬性 |
決定它們是否被選中的屬性 |
|
2. 常用控件的使用辨析
(1)文本框和標簽的區別:
文本框通常用于向計算機輸入信息,而標簽通常用于輸出信息。文本框是一個十分重要的控件,因為由復選框和選項按鈕向程序輸入的信息畢竟只有少數的幾條信息而已。標簽和文本框的區別很小,標簽可以看成是一個在運行時不能修改正文的文本框,因此標簽主要用于輸出信息。
(2) Label的AutoSize屬性和WordWrap屬性
¨ 為了使標簽具有垂直伸展和字換行處理,必須設置它的AutoSize屬性和WordWrap屬性同時為True。
¨ AutoSize屬性為False,WordWrap屬性為False時,若標簽不夠高而Caption太長時,Caption將被切割掉。
¨ AutoSize屬性為False,WordWrap屬性為True時,情況也如此。
¨ AutoSize屬性為True,WordWrap屬性為False時,表示可以水平伸展,但只顯示一行信息。
(3) PictureBox和Image的Stretch屬性和AutoSize屬性
¨ Image只有Stretch屬性,而PictureBox只有AutoSize屬性。
¨ AutoSize屬性設為True,則PictureBox改變自己的大小來適應其中的圖形。
¨ Stretch屬性設為True,則Image中的圖形將改變自己的大小來適應外面的邊框。
(4)Frame 框架、CheckBox 復選框、OptionButton選項按鈕的區別:
¨ 復選框和選項按鈕用于向程序輸入信息, 框架用來對復選框和選項按鈕進行分組。
¨ 復選框選中時會在小方框里打一個鉤,選項按鈕選中時會在小圓圈里點一個點。
3.控件使用舉例
例3、4