工具欄
可以用工具欄進一步增強應(yīng)用程序的菜單界面。工具欄含有工具欄按鈕,它提供了對于應(yīng)用程序中最常用的命令的快速訪問。例如:Visual Basic 的工具欄含有執(zhí)行常用命令的 ToolBarButton,如“打開”(打開已存在的工程)、“保存”(存儲當(dāng)前的工程),等等。
創(chuàng)建工具欄
工具欄(也稱為發(fā)條或者控制欄)已經(jīng)成為許多基于 Windows 的應(yīng)用程序的標(biāo)準(zhǔn)功能。工具欄提供了對于應(yīng)用程序中最常用的菜單命令的快速訪問。使用 ToolBar 控件來創(chuàng)建工具欄非常容易且很方便,它在 Visual Basic的專業(yè)版與企業(yè)版中是可用的。如果使用的是 Visual Basic 學(xué)習(xí)版,則可以像本章后面的“協(xié)調(diào)菜單與工具欄的外觀”所描述的那樣用手工來創(chuàng)建工具欄。
下列示例演示為 MDI 應(yīng)用程序創(chuàng)建工具欄的過程;在標(biāo)準(zhǔn)窗體上創(chuàng)建一個工具欄的過程基本上一樣。
要手工創(chuàng)建工具欄,請按照以下步驟執(zhí)行:
1. 在 MDI 窗體上放置一個圖片框。圖片框的寬度會自動伸展,直到填滿 MDI 窗體工作空間。工作空間就是窗體邊框以內(nèi)的區(qū) 域,不包括標(biāo)題條、菜單欄或所有的工具欄、狀態(tài)欄或者可能在窗體上的滾動條。
注意 只能把那些直接支持 Align 屬性的控件放置在 MDI 窗體上(圖片框是支持這一屬性的唯一的標(biāo)準(zhǔn)控件)。
2. 在圖片框中,可以放置任何想在工具欄上顯示的控件。典型地,用 CommandButton 或 Image 控件來創(chuàng)建工具欄按鈕。圖 6.16表示出了一個含有 Image 控件的工具欄。
要在圖片框中添加控件,單擊工具欄中的控件按鈕,然后在圖片框中畫出它。
注意 當(dāng) MDI 窗體中包含了圖片框時,該 MDI 窗體的內(nèi)部區(qū)域不包括圖片框在內(nèi)。例如:MDI 窗體的 ScaleHeigh 屬性返回 MDI 窗體的內(nèi)部高度,這個高度已不包括圖片框的高度。
3. 設(shè)置設(shè)計時屬性。
使用工具欄的一個好處是可以顯示一個形象的命令圖示。Image 控件是作為工具欄按鈕的一個很好的選擇,因為可以用它來顯示一個位圖。在設(shè)計時設(shè)置其 Picture 屬性來顯示一個位圖;這樣,當(dāng)該按鈕被單擊時,即能提供一個命令執(zhí)行的可見信息。也可以通過設(shè)置按鈕的 ToolTipText屬性來使用工具提示,這樣,當(dāng)用戶把鼠標(biāo)指針保持在一個按鈕上時,就可以顯示出該工具欄按鈕的名稱。
4. 編寫代碼
因為工具欄頻繁地用于提供對其它命令的快捷訪問,因而在大部分時間內(nèi)都是從每一個按鈕的 Click 事件中調(diào)用其它過程,比如對應(yīng)的菜單命令。
提示 可用一個不顯示工具欄的 MDI 窗體來使用在運行時不可見的控件(比如 Timer 控件)。為了做到這一點,在 MDI 窗體上放置一個圖片框,把控件放到圖片框中,然后把圖片框的 Visible 屬性設(shè)置為 False。
編寫工具欄的代碼
工具欄用于提供訪問某些應(yīng)用程序命令的快捷方法。例如:圖 6.16 中工具欄上的第一個按鈕就是“新建文件”命令的快捷鍵。現(xiàn)在,可以在 MDINotePad 示例應(yīng)用程序中三個地方請求創(chuàng)建新文件。
1.在 MDI 窗體上(MDI 窗體上“文件”菜單中的“新建”命令)。
2.在子窗體上(在子窗體“文件”菜單上的“新建”命令)。
3.在工具欄上(“新建文件”按鈕)。
與其把這個代碼重復(fù)三次,還不如從子窗體的 mnuFileNew_Click 事件取出原代碼,然后把它放入子窗體的一個公用過程中。可以從上面任何一個事件過程調(diào)用這個過程。以下是一個示例:
'這個例程在公共過程中。
Public Sub FileNew ()
Dim frmNewPad As New frmNotePad
frmNewPad.Show
End Sub
'在子窗體的“文件”菜單上選取“新建”。
Private Sub mnuchildFileNew_Click ()
FileNew
End Sub
'在 MDI 窗體的“文件”菜單上選取“新建”。
Private Sub mnumdiFileNew_Click ()
frmNotePad.FileNew
End Sub
'在工具欄上單擊“新建文件”按鈕。
Private Sub btnFileNew_Click ()
frmNotePad.FileNew
End Sub
協(xié)調(diào)菜單與工具欄的外觀
當(dāng)由其它應(yīng)用程序提供的對象在窗體中被激活時,有許多方法讓對象的菜單與工具欄出現(xiàn)在容器窗體內(nèi);然而,需要規(guī)定它們將如何顯示。這一過程叫做用戶界面協(xié)調(diào),因為 Visual Basic 與已經(jīng)鏈接或嵌入的對象必須協(xié)調(diào)容器窗體中的空間。
控制菜單的外觀
通過設(shè)置窗體的 NegotiateMenus 屬性可以決定一個鏈接或嵌入的對象的菜單是否出現(xiàn)在容器窗體中。如果子窗體的 NegotiateMenus 屬性置為 True(缺省),而且容器有一個定義的菜單欄,那么,當(dāng)這個對象被激活時,它的菜單就放置在容器的菜單欄中。如果容器沒有菜單欄,或者NegotiateMenus 屬性被設(shè)置為 False,那么,當(dāng)這個對象激活時對象的菜單將不出現(xiàn)。
注意 NegotiateMenus 屬性不適用于 MDI 窗體。
控制工具欄的外觀
MDI 窗體的 NegotiateToolbars 屬性決定了鏈接或嵌入對象的工具欄是不固定的調(diào)色板還是被放置在父窗體上。這種性能不要求工具欄出現(xiàn)在 MDI 父窗體上。如果 MDI 窗體的 NegotiateToolbars 屬性設(shè)為 True,則對象的工具欄出現(xiàn)在 MDI 父窗體上。如果 NegotiateToolbars 設(shè)為 False,則對象的工具欄就為不固定的調(diào)色板。
注意 NegotiateToolbars 屬性只用于 MDI 窗體。
如果 MDI 窗體包含工具欄,它通常被包含在父窗體的 PictureBox 控件中。圖片框的 Negotiate 屬性決定了被激活時容器的工具欄是繼續(xù)顯示還是被對象的工具欄所代替。如果 Negotiate 設(shè)置為 True,則除了容器的工具欄外還顯示對象的工具欄。如果 Negotiate 設(shè)置為 False,則對象的工具欄代替容器的工具欄。
注意 菜單與工具欄的協(xié)調(diào)只發(fā)生在支持現(xiàn)場激活的可插入對象之上。有關(guān)現(xiàn)場激活的詳細信息,請參閱第十章“用部件編程”。用以下過程可以看到這三個屬性如何交互作用。
要執(zhí)行菜單與工具欄的協(xié)調(diào),請按照以下步驟執(zhí)行:
1. 在 MDI 窗體中添加工具欄。這在本章前面的“創(chuàng)建工具欄”中描述過。
2. 在子窗體上放置一個可插入的對象。
3. 設(shè)置 NegotiateMenus、NegotiateToolbars 以及 Negotiate 屬性。
4. 運行此應(yīng)用程序,然后雙擊該對象。
對話框
在基于 Windows 的應(yīng)用程序中,對話框被用來:
提示用戶提供應(yīng)用程序繼續(xù)執(zhí)行所需要的數(shù)據(jù)。
向用戶顯示信息。
例如,在 Visual Basic 中,用“打開文件”對話框來顯示已存在的工程。VisualBasic 中的“關(guān)于”對話框也是一個如何使用對話框來顯示信息的例子。在菜單欄上單擊“幫助”,選擇“關(guān)于 Visual Basic”菜單項,則顯示“關(guān)于”對話框。
模式與無模式的對話框
對話框不是模式就是無模式的。模式對話框,在可以繼續(xù)操作應(yīng)用程序的其他部分之前,必須被關(guān)閉(隱藏或卸載)。例如,如果一個對話框,在可以切換到其它窗體或?qū)υ捒蛑耙笙葐螕?#8220;確定”或“取消”,則它就是模式的。
Visual Basic 中的“關(guān)于”對話框是模式的。顯示重要消息的對話框總應(yīng)當(dāng)是模式的——那就是說,在繼續(xù)做下去之前,總是要求用戶應(yīng)當(dāng)先關(guān)上對話框或者對它的消息作出響應(yīng)。
無模式的對話框允許在對話框與其他窗體之間轉(zhuǎn)移焦點而不用關(guān)閉對話框。當(dāng)對話框正在顯示時,可以在當(dāng)前應(yīng)用程序的其他地方繼續(xù)工作。無模式對話框很少使用。Visual Basic 中“編輯”菜單中的“查找”對話框就是一個無模式對話框的實例。無模式對話框用于顯示頻繁使用的命令與信息。
要將窗體作為模式對話框顯示,請
1.使用 Show 方法,其 style 參數(shù)值為 vbModal(一個值為 1 的常數(shù))。例如:
'將 frmAbout 作為模式對話框顯示。
frmAbout.Show vbModal
要將窗體作為無模式對話框顯示,請
2.使用不帶 style 參數(shù)的 Show方法。
例如:
'將 frmAbout 作為無模式對話框顯示。
frmAbout.Show
注意 如果窗體顯示為模式對話框,則只有當(dāng)對話框關(guān)閉之后,在 Show 方法后的代碼才能執(zhí)行。然而,當(dāng)窗體被顯示為無模式對話框時,在該窗體顯示出來以后,Show 方法后面的代碼緊接著就會執(zhí)行。
Show 方法另有一個可選參數(shù),owner,可用來指定窗體的父子關(guān)系。可將某個窗體名傳給這個參數(shù),使得這個窗體成為新窗體的擁有者。要顯示一個窗體,作為另一個窗體的子窗體,請
這里 Show 方法有兩個參數(shù):style 和 owner。
例如:
' 將 frmAbout 顯示為 frmMain 的無模式子窗體。
frmAbout.Show vbModeless, frmMain
在 Show 方法中使用 owner 參數(shù),確保對話框在它的父窗體最小化時它也最小化,或者在其父窗體關(guān)閉時它也卸載。
預(yù)定義對話框的使用
在應(yīng)用程序中添加對話框最容易的方法是使用預(yù)定義對話框,因為不必考慮設(shè)計、裝載或者顯示對話框方面的問題。然而,控件在其外觀上要受到限制。預(yù)定義的對話框總是模式的。
下表列出了 Visual Basic 應(yīng)用程序中添加預(yù)定義對話框時能使用的函數(shù)。
用輸入框來提示輸入
應(yīng)用 InputBox 函數(shù)請求提供數(shù)據(jù)。這個函數(shù)顯示要求輸入數(shù)據(jù)的模式對話框。圖 6.17 所示的文本輸入框提示輸入要打開文件的名稱。
以下代碼顯示圖 6.17 中所示的輸入框。
FileName = InputBox("Enter file to open:", "File Open")
注意 切記當(dāng)使用 InputBox 函數(shù)時,對對話框的各部分的控制非常有限。只能改變標(biāo)題欄中的文本、顯示給用戶的命令提示、對話框在屏幕上的位置以及它是否顯示一個“幫助”按鈕。
詳細信息 請參閱《語言參考》的“InputBox 函數(shù)”。
用消息對話框顯示信息
可以用 MsgBox 函數(shù)獲得“是”或者“否”的響應(yīng),并顯示簡短的消息,比如:錯誤、警告或者對話框中的期待??赐赀@些消息以后,可選取一個按鈕來關(guān)閉該對話框。
如果文件不能打開,那么名為 Text Editor 的應(yīng)用程序就會顯示如圖 6.18 所示的消息對話框。
以下代碼顯示如圖 6.18 所示的消息框:
MsgBox "Error encountered while trying to open file, _
please retry.", vbExclamation, "Text Editor"
注意 所謂模式的,既可以局限于應(yīng)用程序中,也可以局限于系統(tǒng)中。如果消息框的模式局限在應(yīng)用程序中(缺?。?,則在這個對話框未消失之前不能切換到該應(yīng)用程序的其他部分,但是可以切換到其他應(yīng)用程序。在消息框未消失之前系統(tǒng)的模式消息框不允許切換到別的應(yīng)用程序。
詳細信息 請參閱《語言參考》的“MsgBox 函數(shù)”。
用窗體作為自定義對話框
自定義對話框就是用戶所創(chuàng)建的含有控件的窗體——這些控件包括命令按鈕、選取按鈕和文本框——它們可以為應(yīng)用程序接收信息。通過設(shè)置屬性值來自定義窗體的外觀。也可以編寫在運行時顯示對話框的代碼。
要創(chuàng)建自定義對話框,可以從新窗體著手,或者自定義現(xiàn)成的對話框。如果重復(fù)過多,可以建造能在許多應(yīng)用程序中使用的對話框的集合。
要自定義現(xiàn)存的對話框,請按照以下步驟執(zhí)行:
1. 從“工程”菜單中選取“添加窗體”,在工程中添加一現(xiàn)存的窗體。
2. 從“文件”菜單中選取“filename 另存為”并輸入新的文件名(這可以防止改變已存在的窗體版本)。
3. 根據(jù)需要自定義窗體的外觀。
4. 在代碼窗口中自定義事件過程。
要創(chuàng)建新的對話框,請按照以下步驟執(zhí)行:
1. 從“工程”菜單中選取“添加窗體”。
- 或者 -
在工具欄上單擊“窗體”按鈕,創(chuàng)建新的窗體。
2. 如有必要,自定義窗體外觀。
3. 在“代碼”窗口中自定義事件過程。
有很大的自由來定義自定義對話框的外觀。它可以是固定的或可移動的、模式或無模式的。它可以包含不同類型的控件;然而,對話框通常不包括菜單欄、窗口滾動條、最小化與最大化按鈕、狀態(tài)條或者尺寸可變的邊框。本主題余下的部分將討論創(chuàng)建典型類型的對話框方法。
添加標(biāo)題
對話框總應(yīng)當(dāng)有標(biāo)識它的標(biāo)題。要創(chuàng)建標(biāo)題,設(shè)置該窗體的 Caption 屬性為將在標(biāo)題條中顯示的文本字符串。通常,這一步是在設(shè)計時使用“屬性”窗口來完成的,但也可以用代碼來完成這一步。例如:
frmAbout.Caption = "About"
提示 如果想完全刪除此標(biāo)題欄,可以設(shè)置窗體的 ControlBox、MinButton 和MaxButton 為 False;設(shè)置 BorderStyle 為尺寸不可變的設(shè)置(0、1 或 3),并設(shè)置 Caption 為空字符串 ("")。
設(shè)置標(biāo)準(zhǔn)對話框的屬性
一般來說,用戶響應(yīng)對話框時,先提供信息,然后用“確定”或者“取消”命令按鈕關(guān)閉對話框。因為對話框是臨時性的,用戶通常不需要對它進行移動、改變尺寸、最大化或最小化等操作。其結(jié)果是:隨新窗體出現(xiàn)的可變尺寸邊框類型、“控制”菜單框、“最大化”按鈕以及“最小化”按鈕,在大多數(shù)對話框中都是不需要的。
通過設(shè)置 BorderStyle、ControlBox、MaxButton 和 MinButton 屬性,可以刪除這些項目。例如,“關(guān)于”對話框可能使用以下的屬性設(shè)置。
記住,如果刪除“控制”菜單框 ( ControlBox = False ),則必須向用戶提供退出該對話框的其它方法。實現(xiàn)的辦法通常是在對話框中添加“確定”、“取消”或者“退出”命令按鈕,并在隱藏或卸載該對話框的 Click 按鈕事件中添加代碼。
添加和放置命令按鈕
模式對話框必須至少包含一個退出該對話框的命令按鈕。通常用兩個命令按鈕:其中一個按鈕開始動作,而另一個按鈕關(guān)閉該對話框而不做任何改變。典型狀態(tài)是,這兩個按鈕的 Caption 屬性設(shè)置“確定”與“取消”。在這個方案中,“確定”命令按鈕的 Default 屬性設(shè)置為 True,而 Cancel 命令按鈕的 Cancel 屬性設(shè)置為 True。雖然“確定”與“取消”是最常用的按鈕,其他的按鈕標(biāo)題組合也可使用。
顯示消息的對話框通常使用 Label 控件來顯示錯誤消息或者命令提示,并且用一至兩個命令按鈕來執(zhí)行動作。例如,也許給標(biāo)識的 Caption 屬性賦以錯誤消息或者命令提示,而給兩個命令按鈕控件的 Caption 屬性指定“是”與“否”。當(dāng)用戶選取“是”,則發(fā)生一個動作,當(dāng)選取“否”時,則發(fā)生另一個動作。
這種類型對話框的命令按鈕通常被放置在對話框的底部或右邊,而頂部或左邊的按鈕為缺省按鈕,如圖 6.19 所示。
設(shè)置缺省、取消和焦點
命令按鈕控件提供了以下的屬性:
Default
Cancel
TabIndex
TabStopDefault
按鈕就是當(dāng)用戶按下 ENTER 鍵時選中的按鈕。在一個窗體上,只能有一個命令按鈕的 Default 屬性可以設(shè)置為 True。按下 ENTER 鍵就調(diào)用缺省命令按鈕的 Click 事件。這個功能連同編輯控件(比如 TextBox )一起工作。例如,可以在文本框中鍵入數(shù)據(jù),然后按下 ENTER 鍵來產(chǎn)生Click 事件,以取代選取“確定”按鈕。
“取消”按鈕就是當(dāng)按下 ESC 鍵時選中的按鈕。在一個窗體上,只能有一個命令按鈕的 Cancel 屬性可以設(shè)置為 True。按下 ESC 鍵調(diào)用“取消”命令按鈕的 Click 事件。“取消”按鈕也可以為缺省命令按鈕。要指定對話框的“取消”按鈕,設(shè)置該命令按鈕的 Cancel 屬性為 True。
提示 一般說來,代表最可靠的或者最安全的操作的按鈕應(yīng)當(dāng)是缺省按鈕。例如,在“文本替換”對話框中,“取消”應(yīng)當(dāng)是缺省按鈕,而不是“全部替換”。
也可以指定當(dāng)對話被顯示時具有焦點的按鈕。當(dāng)窗體被顯示時,帶有最低的 TabIndex 設(shè)置的控件接收焦點。按下 ENTER 鍵會調(diào)用缺省命令按鈕或者有焦點的命令按鈕的 Click 事件。要在窗體被顯示時將焦點給某個命令按鈕,則設(shè)置該命令按鈕的 TabIndex 為 0,它的 TabStop 屬性為 True。也可以用 SetFocus 方法在窗體被顯示時將焦點給指定的控件。
詳細信息 請參閱《語言參考》的“TabIndex 屬性”與“TabStop 屬性”。
使對話框上的控件無效
有時候需要使控件無效,因為它們的動作在當(dāng)前的上下文中不適用。例如,當(dāng) Visual Basic 的“查找”對話框第一次顯示時,“查找下一個”按鈕應(yīng)無效,如圖 6.20 所示。設(shè)置對話上的控件的 Enabled 屬性為 False,可以使其無效。
要使對話框上的控件無效,請
1.設(shè)置每個控件的 Enabled 屬性為 False。例如:
cmdFindNext.Enabled = False
cmdReplace.Enabled = False
顯示自定義對話框
使用應(yīng)用程序中顯示其他窗體同樣的方法來顯示對話框。當(dāng)應(yīng)用程序運行時,啟動窗體會自動裝入。想在應(yīng)用程序中出現(xiàn)第二個窗體或?qū)υ捒?,要用裝入并顯示它的代碼來實現(xiàn)。同樣,想要窗體或?qū)υ捒蛳?,也要編寫卸載或隱藏它的代碼。
以下代碼在用戶選取“幫助”菜單中的“關(guān)于”菜單項時顯示“關(guān)于”對話框。
Private Sub mnuHelpAbout_Click ()
'此處用 style = vbModal 的 Show 方法將對話框顯示為模式的。
frmAbout.Show vbModal
End Sub
顯示選項
代碼決定對話框?qū)⑷绾窝b入內(nèi)存與如何顯示。下表描述各種類型的顯示任務(wù)以及用來執(zhí)行這些任務(wù)的關(guān)鍵字。
Show 方法裝入窗體并設(shè)置它的 Visible 屬性為 True。傳遞給 Show 方法的參數(shù)標(biāo)識了該對話框的類型。如果 style 參數(shù)省略或者設(shè)置為 vbModeless或 0(缺?。?,則對話框為無模式類型,如果 style 參數(shù)為 vbModal 或 1,則對話框為模式類型。
當(dāng)選取“確定”或“取消”退出對話框時,可使用 Unload 語句或者 Hide 方法。例如:
Unload frmAbout
- 或者 -
frmAbout.Hide
Unload 語句把對話框從內(nèi)存中刪除,而 Hide 方法只是通過設(shè)置對話框的Visible 屬性為 False 將其從視窗中刪除。當(dāng)卸載窗體時,該窗體本身以及它的控件都從內(nèi)存中卸載(包括在運行時裝入的任何控件)。當(dāng)隱藏窗體時,該窗體以及它的控件仍留在內(nèi)存中?! ‘?dāng)需要節(jié)省內(nèi)存空間時,最好卸載窗體,因為卸載窗體可以釋放內(nèi)存。如果經(jīng)常使用對話框,可以選取隱藏窗體。隱藏窗體仍可以保留與它關(guān)聯(lián)的任何數(shù)據(jù),包括屬性值、打印輸出和動態(tài)創(chuàng)建的控件。窗體被隱藏后,可以繼續(xù)從代碼中引用隱藏窗體的屬性與控件。
各種顯示類型的設(shè)計
Microsoft Windows 是與設(shè)備無關(guān)的-基于窗口的應(yīng)用程序可以在許多不同顯示分辨率與顏色濃度的計算機中運行。同樣,用 Visual Basic 編寫的應(yīng)用程序也會在不同類型的顯示器上運行,在設(shè)計應(yīng)用程序時需要考慮到這一點。
設(shè)計與分辨率無關(guān)的窗體
缺省情況下,當(dāng)改變屏幕分辨率時,Microsoft Visual Basic 不會改變窗體與控件的尺寸。這就意味著在分辨率為 1024×768 的屏幕上設(shè)計的窗體,在分辨率為 640×480 的屏幕中運行時會伸出屏幕的邊界之外。如果想創(chuàng)建不管使用什么樣的屏幕分辨率都能有相同比例的窗體和控件,必須在最低的分辨率下設(shè)計窗體,或者將改變窗體的代碼添加到程序中去。
避免尺寸問題的最簡單的方法是在 640×480 的分辨率下設(shè)計窗體。如果更喜歡在高一些的分辨率下工作,仍需要考慮窗體在低一些的分辨率下將如何顯示。實現(xiàn)這一點的方法是用“Form Layout”窗口預(yù)覽窗體的大小和位置。您也可以使用“Resolution Guides”觀察在低分辨率時屏幕的哪些部分是可見的。要切換到“Resolution Guides”,可以在“Form Layout”窗口單擊鼠標(biāo)右鍵,從彈出菜單上選擇“Resolution Guides”菜單項。
在運行時,Visual Basic 根據(jù)設(shè)計時的位置來放置窗體。如果設(shè)計時在 1024×768 的分辨率上運行,并把窗體放到屏幕的右下角,則當(dāng)它在比較低的分辨率下運行時該窗體可能看不見。為了避免這種情況的發(fā)生,在設(shè)計時可從“Form Layout”窗口的彈出菜單選擇“Startup Position”菜單項來設(shè)置窗體的啟動位置。同樣,您也可以在運行時用下面的 Form Load 事件中的代碼來設(shè)置窗體的位置:
Private Sub Form_Load()
Me.Move 0, 0
End Sub
盡管設(shè)置窗體的 Left 與 Top 的屬性都為 0 也能有同樣的效果,但 Move方法只要一步就能完成。
Visual Basic 使用與設(shè)備無關(guān)的度量單位,緹,是用來計算尺寸與位置的單位。Screen 對象的兩個屬性 TwipsPerPixelX 與 TwipsPerPixelY 可以用來確定運行時的顯示尺寸。應(yīng)用這些屬性,可以編寫代碼來調(diào)整窗體以及控件的尺寸與位置。
Private Sub SetControls()
Dim X As Integer
Dim Y As Integer
X = Screen.TwipsPerPixelX
Y = Screen.TwipsPerPixelY
Select Case X, Y
Case 15, 15
' 重新改變控件尺寸及移動控件。
txtName.Height = 200
txtName.Width = 500
txtName.Move 200, 200
' 增加為其它分辨率編寫的代碼。
…
End Sub
也需要知道在設(shè)計時 Visual Basic 自身窗口的位置。如果在高分辨率下把“工程”窗口放置到屏幕的右邊,那么會發(fā)現(xiàn)在低分辨率下打開工程時,它不再是可訪問的了。
設(shè)計不同濃度的顏色
在設(shè)計應(yīng)用程序時,也需要考慮運行應(yīng)用程序計算機可能的顏色顯示能力。有些計算機可以顯示 256 色或更多的顏色,而另一些只能顯示 16 種顏色。如果使用 256 色的調(diào)色板來設(shè)計窗體,那么在 16 色上顯示時,抖動(模仿無效顏色的一種方法)會使窗體上的一些元素消失。
為了避免這種情況,最好把應(yīng)用程序使用的顏色局限于 Windows 標(biāo)準(zhǔn)的 16種顏色。這些顏色由 Visual Basic 的顏色常數(shù)來表示(如 vbBlack、vbBlue 和vbCyan 等等)。如果在應(yīng)用程序中需要用 16 種以上的顏色,那么對于文本、按鈕以及其他界面元素仍然應(yīng)當(dāng)堅持用標(biāo)準(zhǔn)顏色。
設(shè)計時心里想著用戶
除非創(chuàng)建 Visual Basic 應(yīng)用程序完全只供自己使用,否則創(chuàng)作的價值只能由其他人來評價。應(yīng)用程序的用戶界面對用戶有極大的影響——無論代碼在技術(shù)上多么卓越,或者優(yōu)化得多么的好,如果用戶發(fā)現(xiàn)應(yīng)用程序很難使用,那么他們就難于很好地接受它。
作為程序員,毫無疑問,對計算機方面技術(shù)已非常熟悉。因而很容易忘記大多數(shù)用戶不理解(而且也許并不在意)隱藏在應(yīng)用程序后面的技術(shù)。把應(yīng)用程序看作達到目的工具:完成任務(wù)的方法想象中應(yīng)比沒有計算機的幫助更容易。
一個設(shè)計得好的用戶界面把用戶與基礎(chǔ)技術(shù)隔離開來,從而使完成預(yù)定的任務(wù)變得很容易。在設(shè)計應(yīng)用程序用戶界面的過程中,需要時時想到用戶。如何能無需指導(dǎo)就發(fā)現(xiàn)應(yīng)用程序的各種各樣的功能?當(dāng)錯誤發(fā)生時,應(yīng)用程序如何響應(yīng)?在幫助或輔助用戶方面將提供些什么?設(shè)計是否以一種藝術(shù)美來使用戶高興?以上這些問題的答案以及其他有關(guān)用戶為中心的設(shè)計問題,在本節(jié)中都將涉及到。
界面設(shè)計的基礎(chǔ)
不必成為創(chuàng)建用戶界面的藝術(shù)家——大多數(shù)用戶界面設(shè)計的原則,與任意一門基礎(chǔ)藝術(shù)課中所講授的基礎(chǔ)設(shè)計的原則相同。構(gòu)圖、顏色等的基本的設(shè)計原則,就像它們應(yīng)用在紙張或油畫上一樣,也能很好地在一臺計算機的屏幕上應(yīng)用。
雖然 Visual Basic 能通過簡單地將控件拖動并放置到窗體上而使得創(chuàng)建用戶界面非常容易,但是,在設(shè)計之前稍微計劃一下就能使應(yīng)用程序的可用性有很大地改觀??赡苄柘仍诩埳袭嫵龃绑w開始設(shè)計,決定需要哪些控件,不同元素的相對重要性,以及控件之間的關(guān)系。
構(gòu)圖:應(yīng)用程序的觀感與感覺
窗體的構(gòu)圖或布局不僅影響它的美感,而且也極大地影響應(yīng)用程序的可用性。構(gòu)圖包括諸如控件的位置、元素的一致性、動感、空白空間的使用以及設(shè)計的簡單性等因素。
控件的位置
在大多數(shù)界面設(shè)計中,不是所有的元素都一樣重要。仔細地設(shè)計是很有必要的,以確保越是重要的元素越要很快地顯現(xiàn)給用戶。重要的或者頻繁訪問的元素應(yīng)當(dāng)放在顯著的位置上,而不太重要的元素就應(yīng)當(dāng)降級到不太顯著的位置上。
在大多數(shù)語言中我們習(xí)慣于在一頁之中從左到右、自上到下地閱讀。對于計算機屏幕也如此,大多數(shù)用戶的眼睛會首先注視屏幕的左上部位,所以最重要的元素應(yīng)當(dāng)放在屏幕的左上部位。例如,如果窗體上的信息與客戶有關(guān),則它的名字字段應(yīng)當(dāng)顯示在它能最先被看到的地方。而按鈕,如“確定”或“下一個”,應(yīng)當(dāng)放置在屏幕的右下部位;用戶在未完成對窗體的操作之前,通常不會訪問這些按鈕。
把元素與控件分成組也很重要。盡量把信息按功能或關(guān)系進行邏輯地分組。因為他們的功能彼此相關(guān),所以定位數(shù)據(jù)庫的按鈕應(yīng)當(dāng)被形象地分成一組,而不是分散在窗體的四處。對信息也是一樣,名字字段與地址通常分在一組,因為它們聯(lián)系緊密。在許多情況下,可以使用框架控件來幫助加強控件之間的聯(lián)系。
界面元素的一致性
在用戶界面設(shè)計中,一致性是一種優(yōu)點。一致的外觀與感覺可以在應(yīng)用程序中創(chuàng)造一種和諧,任何東西看上去都那么協(xié)調(diào)。如果界面缺乏一致性,則很可能引起混淆,并使應(yīng)用程序看起來非?;靵y、沒有條理、價值降低,甚至可能引起對應(yīng)用程序可靠性的懷疑。
為了保持視覺上的一致性,在開始開發(fā)應(yīng)用程序之前應(yīng)先創(chuàng)建設(shè)計策略和類型約定。諸如控件的類型、控件的尺寸、分組的標(biāo)準(zhǔn)以及字體的選取等設(shè)計元素都應(yīng)該在事先確定。可以創(chuàng)建設(shè)計樣板來幫助進行設(shè)計。
在 Visual Basic 中有大量的控件可供使用,這可能引起有人想使用所有的控件。為了避免這種引誘,選取能很好地適合特定應(yīng)用程序的控件子集。雖然列表框、組合框、網(wǎng)格以及樹等控件都可用來表示信息列表,最好還是盡可能使用一種類型。
還有,盡量恰當(dāng)?shù)厥褂每丶?,雖然 TextBox 控件可以設(shè)置成只讀并用來顯示文本,但 Label 控件通常更適用于該目的。在為控件設(shè)置屬性時請保持一致性,如果在一個地方為可編輯的文本使用白色背景,除非有很好的理由,否則不要在別的地方又使用灰色。
在應(yīng)用程序中不同的窗體之間保持一致性對其可用性有非常重要的作用。如果在一個窗體上使用了灰色背景以及三維效果,而在另一個窗體上使用白色背景,則這兩個窗體就顯得毫不相干。選定一種類型并在整個應(yīng)用程序保持一致,即使這意味著要重新設(shè)計某些功能。
動感:窗體與其功能匹配
動感是對象功能的可見線索。雖然對這個術(shù)語也許還不熟悉,但動感的實例四處可見。自行車上的把手,手放在它的上面,動感會將把手用手扣緊這件事顯現(xiàn)出來。按下按鈕、旋轉(zhuǎn)旋鈕和點亮電燈的開關(guān)等都能進行動感表示,一看到它們就可以看出其用處。
用戶界面也使用動感。例如,用在命令按鈕上的三維立體效果使得他們看上去像是被按下去的。如果設(shè)計平面邊框的命令按鈕的話,就會失去這種動感,因而不能清楚地告訴用戶它是一個命令按鈕。在有些情況下,平面的按鈕也許是適合的,比如游戲或者多媒體應(yīng)用程序;只要在整個應(yīng)用程序中保持一致就很好。
文本框也提供了一種動感,用戶可以期望帶有邊框和白色背景的框,框中包含可編輯的文本。顯示不帶邊框的文本框 (BorderStyle = 0) 也有可能,這使它看起來像一個標(biāo)簽,并且不能明顯地提示用戶它是可編輯的。
空白空間的使用
在用戶界面中使用空白空間有助于突出元素和改善可用性。空白空間不必非得是白色的——它被認(rèn)為是窗體控件之間以及控件四周的空白區(qū)域。一個窗體上有太多的控件會導(dǎo)致界面雜亂無章,使得尋找一個字段或者控件非常困難。在設(shè)計中需要插入空白空間來突出設(shè)計元素。
各控件之間一致的間隔以及垂直與水平方向元素的對齊也可以使設(shè)計更可用。就像雜志中的文本那樣,安排得行列整齊、行距一致,整齊的界面也會使其容易閱讀。
Visual Basic 提供了幾個工具,使得控件的間距、排列和尺寸的調(diào)整非常容易。“排列”、“按相同大小制作”、“水平間距”、“垂直間距”和“在窗體中央”等命令都可以在“格式”菜單中找到。
保持界面的簡明
界面設(shè)計最重要的原則也許就是簡單化。對于應(yīng)用程序而言,如果界面看上去很難,則可能程序本身也很難。稍稍深入考慮一下便有助于創(chuàng)建看上去(實際上也是)用起來都很簡單的界面。從美學(xué)的角度來講,整潔、簡單明了的設(shè)計常常更可取。
在界面設(shè)計中,一個普遍易犯的錯誤就是力圖用界面來模仿真實世界的對象。例如,想象一下要求創(chuàng)建完整的保險單的應(yīng)用程序。很自然的反應(yīng)就是在屏幕上設(shè)計完全仿照保險單的界面。這樣做會出現(xiàn)幾個問題:保險單的形狀與尺寸和屏幕上的有很大不同,要非常完善地復(fù)制這樣的表格會將其限制在文本框與復(fù)選框中,而對用戶并沒有真正的好處。
最好是設(shè)計出自己的、也能提供原始保險單打印副本(帶打印預(yù)覽)的界面。通過從原始保險單中創(chuàng)建字段的邏輯組,并使用有標(biāo)簽的界面或幾個鏈接的窗體,就可以不要求滾動屏幕而顯示所有的信息。也可以使用附加的控件,比如帶有選取預(yù)裝入的列表框,這些控件可以減少打字工作量。
也可以取出不常用的函數(shù)并把它們移到它們自己的窗體中去,來簡化許多應(yīng)用程序。提供缺省有時也可以簡化應(yīng)用程序;如果十個用戶中有九個選取加粗的文本,就把文本粗體設(shè)為缺省值,而不要叫用戶每次都選取一遍(不要忘記提供一個選項可以覆蓋該缺省值)。向?qū)б灿兄诤喕瘡?fù)雜的或不常用的任務(wù)。
簡化與否最好的檢驗就是在應(yīng)用中觀察應(yīng)用程序。如果有代表性的用戶沒有聯(lián)機幫助就不能立即完成想要完成的任務(wù),那么就需要重新考慮設(shè)計了。
使用顏色與圖像
在界面上使用顏色可以增加視覺上的感染力,但是濫用的現(xiàn)象也時有發(fā)生。許多顯示器能夠顯示幾百萬種顏色,這很容易使人要全部使用它們。如果在開始設(shè)計時沒有仔細地考慮,顏色也會像其他基本設(shè)計原則一樣,出現(xiàn)許多問題。
每個人對顏色的喜愛有很大的不同,用戶的品味也會各不相同。顏色能夠引發(fā)強烈的情感,如果正在設(shè)計針對全球讀者的程序,那么某些顏色可能有文化上的重大意義。一般說來,最好保守傳統(tǒng),采用一些柔和的、更中性化的顏色。
當(dāng)然,預(yù)期的讀者以及試圖傳達的語氣與情緒也會影響對顏色的選取。明亮的紅色、綠色和黃色適用于小孩子使用的應(yīng)用程序,但是在銀行應(yīng)用程序中它很難帶來財務(wù)責(zé)任心。
少量明亮色彩可以有效地突出或者吸引人們對重要區(qū)域的注意。作為經(jīng)驗之談,應(yīng)當(dāng)盡量限制應(yīng)用程序所用顏色的種類,而且色調(diào)也應(yīng)該保持一致。如果可能的話,最好堅持標(biāo)準(zhǔn)的 16 色的調(diào)色板;在 16 色顯示器上觀看時,抖動會使得其他一些顏色顯示不出來。 使用顏色時另一個需要考慮的問題就是色盲。有一些人不能分辨不同的基色(如紅色與綠色)組合之間的差別。對于有這種情況的人,綠色背景上的紅色文本就會看不見。
圖像和圖標(biāo)
圖片與圖標(biāo)的使用也可以增加應(yīng)用程序的視覺上的趣味,但是,細心的設(shè)計也是必不可少的。不用文本,圖像就可以形象地傳達信息,但常常不同的人對圖像的理解也不一樣。
帶有表示各種功能的圖標(biāo)的工具欄,它是一種很有用的界面設(shè)備,但如果不能很容易地識別圖標(biāo)所表示的功能,反而會事與愿違。在設(shè)計工具欄圖標(biāo)時,應(yīng)查看一下其它的應(yīng)用程序以了解已經(jīng)創(chuàng)建了什么樣的標(biāo)準(zhǔn)。例如,許多應(yīng)用程序用一張角上有卷邊的紙來表示“新建文件”圖標(biāo)。也許還有更好的比喻來表示這一功能,但改用其它的表示方法會引起用戶的混淆。
考慮圖像文化上的意義也非常重要。許多程序使用田園風(fēng)格的帶一面旗的郵箱(圖 6.21)來代表郵件功能。這原本是美國的圖標(biāo);其他國家/地區(qū)或文化的用戶也許不把它看作郵箱。
在設(shè)計自己的圖標(biāo)與圖像時,應(yīng)盡量使它們簡單。具有多種顏色的復(fù)雜的圖片,作為16×16像素的工具欄圖標(biāo),或者在高分辨率的屏幕上顯示時,都不能很好地適應(yīng)。
選取字體
字體也是用戶界面的重要部分,因為它們常常給用戶傳遞重要的信息。需選取在不同的分辨率和不同類型的顯示器上都能容易閱讀的字體。最好盡量堅持使用簡單的無襯線字體或者襯線字體。通常手寫字體或者其他裝飾性字體的打印效果比屏幕上的效果更好,而且字體越小讀起來越難。
除非計劃按應(yīng)用程序來配置字體,否則應(yīng)當(dāng)堅持使用標(biāo)準(zhǔn) Windows 字體,如 Arial、New Times Roman 或者 System。如果用戶的系統(tǒng)沒有包含指定的字體,系統(tǒng)會使用替代的字體,其結(jié)果可能與設(shè)想的完全不一樣。如果正在為國際讀者設(shè)計,需要調(diào)查在預(yù)想的語言里可用什么字體。還有,在為其他語言設(shè)計時,需要考慮文本的擴展——有些語言的文本串可以多占50% 以上的空間。
還有,在選取字體時,設(shè)計的一致性非常重要。大多數(shù)情況下,不應(yīng)當(dāng)在應(yīng)用程序中使用兩種以上字體。太多的字體會使得應(yīng)用程序看上去像罰款通知單。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。