Visual Basic 工具欄、對(duì)話框_第1頁(yè)
Visual Basic 工具欄、對(duì)話框_第2頁(yè)
Visual Basic 工具欄、對(duì)話框_第3頁(yè)
Visual Basic 工具欄、對(duì)話框_第4頁(yè)
Visual Basic 工具欄、對(duì)話框_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

/工具欄?可以用工具欄進(jìn)一步增強(qiáng)應(yīng)用程序的菜單界面.工具欄含有工具欄按鈕,它提供了對(duì)于應(yīng)用程序中最常用的命令的快速訪問。例如:VisualBasic的工具欄含有執(zhí)行常用命令的ToolBarButton,如“打開”(打開已存在的工程)、“保存”(存儲(chǔ)當(dāng)前的工程),等等。

?創(chuàng)建工具欄?工具欄(也稱為發(fā)條或者控制欄)已經(jīng)成為許多基于Windows的應(yīng)用程序的標(biāo)準(zhǔn)功能。工具欄提供了對(duì)于應(yīng)用程序中最常用的菜單命令的快速訪問。使用ToolBar控件來創(chuàng)建工具欄非常容易且很方便,它在VisualBasic的專業(yè)版與企業(yè)版中是可用的。如果使用的是VisualBasic學(xué)習(xí)版,則可以像本章后面的“協(xié)調(diào)菜單與工具欄的外觀”所描述的那樣用手工來創(chuàng)建工具欄。?下列示例演示為MDI應(yīng)用程序創(chuàng)建工具欄的過程;在標(biāo)準(zhǔn)窗體上創(chuàng)建一個(gè)工具欄的過程基本上一樣.

要手工創(chuàng)建工具欄,請(qǐng)按照以下步驟執(zhí)行:?1.在MDI窗體上放置一個(gè)圖片框。圖片框的寬度會(huì)自動(dòng)伸展,直到填滿MDI窗體工作空間。工作空間就是窗體邊框以內(nèi)的區(qū)域,不包括標(biāo)題條、菜單欄或所有的工具欄、狀態(tài)欄或者可能在窗體上的滾動(dòng)條。

注意只能把那些直接支持Align屬性的控件放置在MDI窗體上(圖片框是支持這一屬性的唯一的標(biāo)準(zhǔn)控件)。

2.在圖片框中,可以放置任何想在工具欄上顯示的控件。典型地,用CommandButton或Image控件來創(chuàng)建工具欄按鈕。圖6.16表示出了一個(gè)含有Image控件的工具欄.?要在圖片框中添加控件,單擊工具欄中的控件按鈕,然后在圖片框中畫出它。?注意當(dāng)MDI窗體中包含了圖片框時(shí),該MDI窗體的內(nèi)部區(qū)域不包括圖片框在內(nèi)。例如:MDI窗體的ScaleHeigh屬性返回MDI窗體的內(nèi)部高度,這個(gè)高度已不包括圖片框的高度。??3.設(shè)置設(shè)計(jì)時(shí)屬性。

使用工具欄的一個(gè)好處是可以顯示一個(gè)形象的命令圖示。Image控件是作為工具欄按鈕的一個(gè)很好的選擇,因?yàn)榭梢杂盟鼇盹@示一個(gè)位圖。在設(shè)計(jì)時(shí)設(shè)置其Picture屬性來顯示一個(gè)位圖;這樣,當(dāng)該按鈕被單擊時(shí),即能提供一個(gè)命令執(zhí)行的可見信息。也可以通過設(shè)置按鈕的ToolTipText屬性來使用工具提示,這樣,當(dāng)用戶把鼠標(biāo)指針保持在一個(gè)按鈕上時(shí),就可以顯示出該工具欄按鈕的名稱。?4.編寫代碼?因?yàn)楣ぞ邫陬l繁地用于提供對(duì)其它命令的快捷訪問,因而在大部分時(shí)間內(nèi)都是從每一個(gè)按鈕的Click事件中調(diào)用其它過程,比如對(duì)應(yīng)的菜單命令.?提示可用一個(gè)不顯示工具欄的MDI窗體來使用在運(yùn)行時(shí)不可見的控件(比如Timer控件)。為了做到這一點(diǎn),在MDI窗體上放置一個(gè)圖片框,把控件放到圖片框中,然后把圖片框的Visible屬性設(shè)置為False。?

編寫工具欄的代碼?工具欄用于提供訪問某些應(yīng)用程序命令的快捷方法。例如:圖6。16中工具欄上的第一個(gè)按鈕就是“新建文件”命令的快捷鍵.現(xiàn)在,可以在MDINotePad示例應(yīng)用程序中三個(gè)地方請(qǐng)求創(chuàng)建新文件。?1.在MDI窗體上(MDI窗體上“文件"菜單中的“新建”命令)。?2.在子窗體上(在子窗體“文件”菜單上的“新建"命令).

3.在工具欄上(“新建文件"按鈕)。?與其把這個(gè)代碼重復(fù)三次,還不如從子窗體的mnu事件取出原代碼,然后把它放入子窗體的一個(gè)公用過程中.可以從上面任何一個(gè)事件過程調(diào)用這個(gè)過程.以下是一個(gè)示例:?'這個(gè)例程在公共過程中。?PublicSub()

DimfrmNewPadAsNewfrmNotePad?frmNewPad.Show

EndSub

?’在子窗體的“文件”菜單上選取“新建”。

PrivateSubmnuchild()

EndSub

?'在MDI窗體的“文件”菜單上選取“新建”。

PrivateSubmnumdi()?frmNotePad.

EndSub??'在工具欄上單擊“新建文件"按鈕。

PrivateSubbtn()

frmNotePad.

EndSub

?協(xié)調(diào)菜單與工具欄的外觀?當(dāng)由其它應(yīng)用程序提供的對(duì)象在窗體中被激活時(shí),有許多方法讓對(duì)象的菜單與工具欄出現(xiàn)在容器窗體內(nèi);然而,需要規(guī)定它們將如何顯示。這一過程叫做用戶界面協(xié)調(diào),因?yàn)閂isualBasic與已經(jīng)鏈接或嵌入的對(duì)象必須協(xié)調(diào)容器窗體中的空間。?

控制菜單的外觀?通過設(shè)置窗體的Negotiat(yī)eMenus屬性可以決定一個(gè)鏈接或嵌入的對(duì)象的菜單是否出現(xiàn)在容器窗體中。如果子窗體的NegotiateMenus屬性置為True(缺省),而且容器有一個(gè)定義的菜單欄,那么,當(dāng)這個(gè)對(duì)象被激活時(shí),它的菜單就放置在容器的菜單欄中。如果容器沒有菜單欄,或者NegotiateMenus屬性被設(shè)置為False,那么,當(dāng)這個(gè)對(duì)象激活時(shí)對(duì)象的菜單將不出現(xiàn)。?注意NegotiateMenus屬性不適用于MDI窗體。

控制工具欄的外觀

MDI窗體的NegotiateToolbars屬性決定了鏈接或嵌入對(duì)象的工具欄是不固定的調(diào)色板還是被放置在父窗體上.這種性能不要求工具欄出現(xiàn)在MDI父窗體上。如果MDI窗體的NegotiateToolbars屬性設(shè)為True,則對(duì)象的工具欄出現(xiàn)在MDI父窗體上。如果NegotiateToolbars設(shè)為False,則對(duì)象的工具欄就為不固定的調(diào)色板。?注意NegotiateToolbars屬性只用于MDI窗體.?如果MDI窗體包含工具欄,它通常被包含在父窗體的PictureBox控件中。圖片框的Negotiate屬性決定了被激活時(shí)容器的工具欄是繼續(xù)顯示還是被對(duì)象的工具欄所代替.如果Negotiate設(shè)置為True,則除了容器的工具欄外還顯示對(duì)象的工具欄.如果Negotiate設(shè)置為False,則對(duì)象的工具欄代替容器的工具欄.

注意菜單與工具欄的協(xié)調(diào)只發(fā)生在支持現(xiàn)場(chǎng)激活的可插入對(duì)象之上.有關(guān)現(xiàn)場(chǎng)激活的詳細(xì)信息,請(qǐng)參閱第十章“用部件編程”.用以下過程可以看到這三個(gè)屬性如何交互作用.?要執(zhí)行菜單與工具欄的協(xié)調(diào),請(qǐng)按照以下步驟執(zhí)行:

1.在MDI窗體中添加工具欄。這在本章前面的“創(chuàng)建工具欄”中描述過。

2.在子窗體上放置一個(gè)可插入的對(duì)象.?3.設(shè)置Negotiat(yī)eMenus、NegotiateToolbars以及Negotiate屬性。?4。運(yùn)行此應(yīng)用程序,然后雙擊該對(duì)象。??對(duì)話框

在基于Windows的應(yīng)用程序中,對(duì)話框被用來:?提示用戶提供應(yīng)用程序繼續(xù)執(zhí)行所需要的數(shù)據(jù).?向用戶顯示信息。?例如,在VisualBasic中,用“打開文件"對(duì)話框來顯示已存在的工程。VisualBasic中的“關(guān)于”對(duì)話框也是一個(gè)如何使用對(duì)話框來顯示信息的例子.在菜單欄上單擊“幫助”,選擇“關(guān)于VisualBasic”菜單項(xiàng),則顯示“關(guān)于"對(duì)話框。

?模式與無模式的對(duì)話框

對(duì)話框不是模式就是無模式的。模式對(duì)話框,在可以繼續(xù)操作應(yīng)用程序的其他部分之前,必須被關(guān)閉(隱藏或卸載).例如,如果一個(gè)對(duì)話框,在可以切換到其它窗體或?qū)υ捒蛑耙笙葐螕簟按_定"或“取消”,則它就是模式的。

VisualBasic中的“關(guān)于”對(duì)話框是模式的.顯示重要消息的對(duì)話框總應(yīng)當(dāng)是模式的—-那就是說,在繼續(xù)做下去之前,總是要求用戶應(yīng)當(dāng)先關(guān)上對(duì)話框或者對(duì)它的消息作出響應(yīng)。

無模式的對(duì)話框允許在對(duì)話框與其他窗體之間轉(zhuǎn)移焦點(diǎn)而不用關(guān)閉對(duì)話框.當(dāng)對(duì)話框正在顯示時(shí),可以在當(dāng)前應(yīng)用程序的其他地方繼續(xù)工作。無模式對(duì)話框很少使用.VisualBasic中“編輯”菜單中的“查找”對(duì)話框就是一個(gè)無模式對(duì)話框的實(shí)例。無模式對(duì)話框用于顯示頻繁使用的命令與信息.

要將窗體作為模式對(duì)話框顯示,請(qǐng)?1.使用Show方法,其style參數(shù)值為vbModal(一個(gè)值為1的常數(shù))。例如:

’將frmAbout作為模式對(duì)話框顯示。?frmAbout。ShowvbModal

要將窗體作為無模式對(duì)話框顯示,請(qǐng)?2。使用不帶style參數(shù)的Show方法。

例如:?'將frmAbout作為無模式對(duì)話框顯示。?frmAbout.Show

注意如果窗體顯示為模式對(duì)話框,則只有當(dāng)對(duì)話框關(guān)閉之后,在Show方法后的代碼才能執(zhí)行。然而,當(dāng)窗體被顯示為無模式對(duì)話框時(shí),在該窗體顯示出來以后,Show方法后面的代碼緊接著就會(huì)執(zhí)行.?Show方法另有一個(gè)可選參數(shù),owner,可用來指定窗體的父子關(guān)系??蓪⒛硞€(gè)窗體名傳給這個(gè)參數(shù),使得這個(gè)窗體成為新窗體的擁有者。要顯示一個(gè)窗體,作為另一個(gè)窗體的子窗體,請(qǐng)

這里Show方法有兩個(gè)參數(shù):style和owner。?例如:?'將frmAbout顯示為frmMain的無模式子窗體。?frmAbout。ShowvbModeless,frmMain

在Show方法中使用owner參數(shù),確保對(duì)話框在它的父窗體最小化時(shí)它也最小化,或者在其父窗體關(guān)閉時(shí)它也卸載。

?預(yù)定義對(duì)話框的使用

在應(yīng)用程序中添加對(duì)話框最容易的方法是使用預(yù)定義對(duì)話框,因?yàn)椴槐乜紤]設(shè)計(jì)、裝載或者顯示對(duì)話框方面的問題。然而,控件在其外觀上要受到限制。預(yù)定義的對(duì)話框總是模式的。

下表列出了VisualBasic應(yīng)用程序中添加預(yù)定義對(duì)話框時(shí)能使用的函數(shù).

用輸入框來提示輸入

應(yīng)用InputBox函數(shù)請(qǐng)求提供數(shù)據(jù).這個(gè)函數(shù)顯示要求輸入數(shù)據(jù)的模式對(duì)話框。圖6。17所示的文本輸入框提示輸入要打開文件的名稱。?

以下代碼顯示圖6.17中所示的輸入框.?=InputBox("Enteropen:",”")?注意切記當(dāng)使用InputBox函數(shù)時(shí),對(duì)對(duì)話框的各部分的控制非常有限。只能改變標(biāo)題欄中的文本、顯示給用戶的命令提示、對(duì)話框在屏幕上的位置以及它是否顯示一個(gè)“幫助”按鈕。

詳細(xì)信息請(qǐng)參閱《語(yǔ)言參考》的“InputBox函數(shù)”。?

用消息對(duì)話框顯示信息

可以用MsgBox函數(shù)獲得“是”或者“否”的響應(yīng),并顯示簡(jiǎn)短的消息,比如:錯(cuò)誤、警告或者對(duì)話框中的期待。看完這些消息以后,可選取一個(gè)按鈕來關(guān)閉該對(duì)話框.?如果文件不能打開,那么名為TextEditor的應(yīng)用程序就會(huì)顯示如圖6。18所示的消息對(duì)話框。

以下代碼顯示如圖6。18所示的消息框:

MsgBox"Errorencounteredwhiletryingtoopenfile,_?pleaseretry.”,vbExclamation,"TextEditor"

注意所謂模式的,既可以局限于應(yīng)用程序中,也可以局限于系統(tǒng)中。如果消息框的模式局限在應(yīng)用程序中(缺省),則在這個(gè)對(duì)話框未消失之前不能切換到該應(yīng)用程序的其他部分,但是可以切換到其他應(yīng)用程序.在消息框未消失之前系統(tǒng)的模式消息框不允許切換到別的應(yīng)用程序.?詳細(xì)信息請(qǐng)參閱《語(yǔ)言參考》的“MsgBox函數(shù)”.

?用窗體作為自定義對(duì)話框?自定義對(duì)話框就是用戶所創(chuàng)建的含有控件的窗體——這些控件包括命令按鈕、選取按鈕和文本框——它們可以為應(yīng)用程序接收信息。通過設(shè)置屬性值來自定義窗體的外觀。也可以編寫在運(yùn)行時(shí)顯示對(duì)話框的代碼.?要?jiǎng)?chuàng)建自定義對(duì)話框,可以從新窗體著手,或者自定義現(xiàn)成的對(duì)話框。如果重復(fù)過多,可以建造能在許多應(yīng)用程序中使用的對(duì)話框的集合.?要自定義現(xiàn)存的對(duì)話框,請(qǐng)按照以下步驟執(zhí)行:?1.從“工程”菜單中選取“添加窗體”,在工程中添加一現(xiàn)存的窗體。

2。從“文件"菜單中選取“另存為”并輸入新的文件名(這可以防止改變已存在的窗體版本).

3。根據(jù)需要自定義窗體的外觀。?4。在代碼窗口中自定義事件過程.?要?jiǎng)?chuàng)建新的對(duì)話框,請(qǐng)按照以下步驟執(zhí)行:?1.從“工程”菜單中選取“添加窗體”.

-或者-?在工具欄上單擊“窗體”按鈕,創(chuàng)建新的窗體。

2.如有必要,自定義窗體外觀。

3。在“代碼”窗口中自定義事件過程。?有很大的自由來定義自定義對(duì)話框的外觀。它可以是固定的或可移動(dòng)的、模式或無模式的。它可以包含不同類型的控件;然而,對(duì)話框通常不包括菜單欄、窗口滾動(dòng)條、最小化與最大化按鈕、狀態(tài)條或者尺寸可變的邊框。本主題余下的部分將討論創(chuàng)建典型類型的對(duì)話框方法。

?添加標(biāo)題?對(duì)話框總應(yīng)當(dāng)有標(biāo)識(shí)它的標(biāo)題.要?jiǎng)?chuàng)建標(biāo)題,設(shè)置該窗體的Caption屬性為將在標(biāo)題條中顯示的文本字符串。通常,這一步是在設(shè)計(jì)時(shí)使用“屬性”窗口來完成的,但也可以用代碼來完成這一步。例如:?ption="About”?提示如果想完全刪除此標(biāo)題欄,可以設(shè)置窗體的ControlBox、MinButton和MaxButton為False;設(shè)置BorderStyle為尺寸不可變的設(shè)置(0、1或3),并設(shè)置Caption為空字符串(””)。

?設(shè)置標(biāo)準(zhǔn)對(duì)話框的屬性?一般來說,用戶響應(yīng)對(duì)話框時(shí),先提供信息,然后用“確定”或者“取消”命令按鈕關(guān)閉對(duì)話框。因?yàn)閷?duì)話框是臨時(shí)性的,用戶通常不需要對(duì)它進(jìn)行移動(dòng)、改變尺寸、最大化或最小化等操作。其結(jié)果是:隨新窗體出現(xiàn)的可變尺寸邊框類型、“控制”菜單框、“最大化"按鈕以及“最小化"按鈕,在大多數(shù)對(duì)話框中都是不需要的。

通過設(shè)置BorderStyle、ControlBox、MaxButton和MinButton屬性,可以刪除這些項(xiàng)目。例如,“關(guān)于"對(duì)話框可能使用以下的屬性設(shè)置。

?記住,如果刪除“控制”菜單框(ControlBox=False),則必須向用戶提供退出該對(duì)話框的其它方法.實(shí)現(xiàn)的辦法通常是在對(duì)話框中添加“確定”、“取消”或者“退出"命令按鈕,并在隱藏或卸載該對(duì)話框的Click按鈕事件中添加代碼。

添加和放置命令按鈕

模式對(duì)話框必須至少包含一個(gè)退出該對(duì)話框的命令按鈕.通常用兩個(gè)命令按鈕:其中一個(gè)按鈕開始動(dòng)作,而另一個(gè)按鈕關(guān)閉該對(duì)話框而不做任何改變。典型狀態(tài)是,這兩個(gè)按鈕的Caption屬性設(shè)置“確定”與“取消"。在這個(gè)方案中,“確定”命令按鈕的Default屬性設(shè)置為True,而Cancel命令按鈕的Cancel屬性設(shè)置為True。雖然“確定”與“取消"是最常用的按鈕,其他的按鈕標(biāo)題組合也可使用.

?顯示消息的對(duì)話框通常使用Label控件來顯示錯(cuò)誤消息或者命令提示,并且用一至兩個(gè)命令按鈕來執(zhí)行動(dòng)作。例如,也許給標(biāo)識(shí)的Caption屬性賦以錯(cuò)誤消息或者命令提示,而給兩個(gè)命令按鈕控件的Caption屬性指定“是"與“否”。當(dāng)用戶選取“是",則發(fā)生一個(gè)動(dòng)作,當(dāng)選取“否”時(shí),則發(fā)生另一個(gè)動(dòng)作.

這種類型對(duì)話框的命令按鈕通常被放置在對(duì)話框的底部或右邊,而頂部或左邊的按鈕為缺省按鈕,如圖6。19所示.?

?設(shè)置缺省、取消和焦點(diǎn)?命令按鈕控件提供了以下的屬性:?Default?Cancel

TabIndex

TabStopDefault

按鈕就是當(dāng)用戶按下ENTER鍵時(shí)選中的按鈕。在一個(gè)窗體上,只能有一個(gè)命令按鈕的Default屬性可以設(shè)置為True。按下ENTER鍵就調(diào)用缺省命令按鈕的Click事件。這個(gè)功能連同編輯控件(比如TextBox)一起工作。例如,可以在文本框中鍵入數(shù)據(jù),然后按下ENTER鍵來產(chǎn)生Click事件,以取代選取“確定"按鈕.

“取消"按鈕就是當(dāng)按下ESC鍵時(shí)選中的按鈕。在一個(gè)窗體上,只能有一個(gè)命令按鈕的Cancel屬性可以設(shè)置為True。按下ESC鍵調(diào)用“取消”命令按鈕的Click事件?!叭∠卑粹o也可以為缺省命令按鈕。要指定對(duì)話框的“取消"按鈕,設(shè)置該命令按鈕的Cancel屬性為True。

提示一般說來,代表最可靠的或者最安全的操作的按鈕應(yīng)當(dāng)是缺省按鈕。例如,在“文本替換"對(duì)話框中,“取消"應(yīng)當(dāng)是缺省按鈕,而不是“全部替換".?也可以指定當(dāng)對(duì)話被顯示時(shí)具有焦點(diǎn)的按鈕。當(dāng)窗體被顯示時(shí),帶有最低的TabIndex設(shè)置的控件接收焦點(diǎn)。按下ENTER鍵會(huì)調(diào)用缺省命令按鈕或者有焦點(diǎn)的命令按鈕的Click事件。要在窗體被顯示時(shí)將焦點(diǎn)給某個(gè)命令按鈕,則設(shè)置該命令按鈕的TabIndex為0,它的TabStop屬性為True。也可以用SetFocus方法在窗體被顯示時(shí)將焦點(diǎn)給指定的控件。

詳細(xì)信息請(qǐng)參閱《語(yǔ)言參考》的“TabIndex屬性”與“TabStop屬性"。?

使對(duì)話框上的控件無效

有時(shí)候需要使控件無效,因?yàn)樗鼈兊膭?dòng)作在當(dāng)前的上下文中不適用。例如,當(dāng)VisualBasic的“查找”對(duì)話框第一次顯示時(shí),“查找下一個(gè)”按鈕應(yīng)無效,如圖6。20所示。設(shè)置對(duì)話上的控件的Enabled屬性為False,可以使其無效.

要使對(duì)話框上的控件無效,請(qǐng)?1。設(shè)置每個(gè)控件的Enabled屬性為False。例如:

cmdFindNext。Enabled=False?cmdReplace.Enabled=False

顯示自定義對(duì)話框

使用應(yīng)用程序中顯示其他窗體同樣的方法來顯示對(duì)話框。當(dāng)應(yīng)用程序運(yùn)行時(shí),啟動(dòng)窗體會(huì)自動(dòng)裝入。想在應(yīng)用程序中出現(xiàn)第二個(gè)窗體或?qū)υ捒?,要用裝入并顯示它的代碼來實(shí)現(xiàn).同樣,想要窗體或?qū)υ捒蛳?也要編寫卸載或隱藏它的代碼。?以下代碼在用戶選取“幫助”菜單中的“關(guān)于”菜單項(xiàng)時(shí)顯示“關(guān)于”對(duì)話框。

Privat(yī)eSubmnuHelpAbout_Click()

'此處用style=vbModal的Show方法將對(duì)話框顯示為模式的。

frmAbout.ShowvbModal

EndSub顯示選項(xiàng)

代碼決定對(duì)話框?qū)⑷绾窝b入內(nèi)存與如何顯示.下表描述各種類型的顯示任務(wù)以及用來執(zhí)行這些任務(wù)的關(guān)鍵字。??Show方法裝入窗體并設(shè)置它的Visible屬性為True。傳遞給Show方法的參數(shù)標(biāo)識(shí)了該對(duì)話框的類型。如果style參數(shù)省略或者設(shè)置為vbModeless或0(缺省),則對(duì)話框?yàn)闊o模式類型,如果style參數(shù)為vbModal或1,則對(duì)話框?yàn)槟J筋愋汀?/p>

當(dāng)選取“確定"或“取消”退出對(duì)話框時(shí),可使用Unload語(yǔ)句或者Hide方法。例如:?UnloadfrmAbout?-或者-

frmAbout.Hide?Unload語(yǔ)句把對(duì)話框從內(nèi)存中刪除,而Hide方法只是通過設(shè)置對(duì)話框的Visible屬性為False將其從視窗中刪除.當(dāng)卸載窗體時(shí),該窗體本身以及它的控件都從內(nèi)存中卸載(包括在運(yùn)行時(shí)裝入的任何控件).當(dāng)隱藏窗體時(shí),該窗體以及它的控件仍留在內(nèi)存中。當(dāng)需要節(jié)省內(nèi)存空間時(shí),最好卸載窗體,因?yàn)樾遁d窗體可以釋放內(nèi)存。如果經(jīng)常使用對(duì)話框,可以選取隱藏窗體。隱藏窗體仍可以保留與它關(guān)聯(lián)的任何數(shù)據(jù),包括屬性值、打印輸出和動(dòng)態(tài)創(chuàng)建的控件.窗體被隱藏后,可以繼續(xù)從代碼中引用隱藏窗體的屬性與控件。?

各種顯示類型的設(shè)計(jì)

MicrosoftWindows是與設(shè)備無關(guān)的-基于窗口的應(yīng)用程序可以在許多不同顯示分辨率與顏色濃度的計(jì)算機(jī)中運(yùn)行。同樣,用VisualBasic編寫的應(yīng)用程序也會(huì)在不同類型的顯示器上運(yùn)行,在設(shè)計(jì)應(yīng)用程序時(shí)需要考慮到這一點(diǎn).??設(shè)計(jì)與分辨率無關(guān)的窗體

缺省情況下,當(dāng)改變屏幕分辨率時(shí),MicrosoftVisualBasic不會(huì)改變窗體與控件的尺寸。這就意味著在分辨率為1024×768的屏幕上設(shè)計(jì)的窗體,在分辨率為640×480的屏幕中運(yùn)行時(shí)會(huì)伸出屏幕的邊界之外。如果想創(chuàng)建不管使用什么樣的屏幕分辨率都能有相同比例的窗體和控件,必須在最低的分辨率下設(shè)計(jì)窗體,或者將改變窗體的代碼添加到程序中去。

避免尺寸問題的最簡(jiǎn)單的方法是在640×480的分辨率下設(shè)計(jì)窗體.如果更喜歡在高一些的分辨率下工作,仍需要考慮窗體在低一些的分辨率下將如何顯示。實(shí)現(xiàn)這一點(diǎn)的方法是用“FormLayout”窗口預(yù)覽窗體的大小和位置。您也可以使用“ResolutionGuides”觀察在低分辨率時(shí)屏幕的哪些部分是可見的。要切換到“ResolutionGuides",可以在“FormLayout"窗口單擊鼠標(biāo)右鍵,從彈出菜單上選擇“ResolutionGuides”菜單項(xiàng)。

在運(yùn)行時(shí),VisualBasic根據(jù)設(shè)計(jì)時(shí)的位置來放置窗體。如果設(shè)計(jì)時(shí)在1024×768的分辨率上運(yùn)行,并把窗體放到屏幕的右下角,則當(dāng)它在比較低的分辨率下運(yùn)行時(shí)該窗體可能看不見。為了避免這種情況的發(fā)生,在設(shè)計(jì)時(shí)可從“FormLayout”窗口的彈出菜單選擇“StartupPosition”菜單項(xiàng)來設(shè)置窗體的啟動(dòng)位置。同樣,您也可以在運(yùn)行時(shí)用下面的FormLoad事件中的代碼來設(shè)置窗體的位置:?PrivateSubForm_Load()

Me.Move0,0

EndSub

盡管設(shè)置窗體的Left與Top的屬性都為0也能有同樣的效果,但Move方法只要一步就能完成。

VisualBasic使用與設(shè)備無關(guān)的度量單位,緹,是用來計(jì)算尺寸與位置的單位。Scree(cuò)n對(duì)象的兩個(gè)屬性TwipsPerPixelX與TwipsPerPixelY可以用來確定運(yùn)行時(shí)的顯示尺寸。應(yīng)用這些屬性,可以編寫代碼來調(diào)整窗體以及控件的尺寸與位置。?PrivateSubSetControls()?DimXAsInteger

DimYAsInteger

?X=Screen。TwipsPerPixelX

Y=Screen。TwipsPerPixelY?SelectCaseX,Y

Case15,15?’重新改變控件尺寸及移動(dòng)控件。?txtName.Height=200

txtName。Width=500

txtName.Move200,200

'增加為其它分辨率編寫的代碼。

…?EndSub

也需要知道在設(shè)計(jì)時(shí)VisualBasic自身窗口的位置。如果在高分辨率下把“工程”窗口放置到屏幕的右邊,那么會(huì)發(fā)現(xiàn)在低分辨率下打開工程時(shí),它不再是可訪問的了。?

設(shè)計(jì)不同濃度的顏色

在設(shè)計(jì)應(yīng)用程序時(shí),也需要考慮運(yùn)行應(yīng)用程序計(jì)算機(jī)可能的顏色顯示能力。有些計(jì)算機(jī)可以顯示256色或更多的顏色,而另一些只能顯示16種顏色.如果使用256色的調(diào)色板來設(shè)計(jì)窗體,那么在16色上顯示時(shí),抖動(dòng)(模仿無效顏色的一種方法)會(huì)使窗體上的一些元素消失。

為了避免這種情況,最好把應(yīng)用程序使用的顏色局限于Windows標(biāo)準(zhǔn)的16種顏色.這些顏色由VisualBasic的顏色常數(shù)來表示(如vbBlack、vbBlue和vbCyan等等)。如果在應(yīng)用程序中需要用16種以上的顏色,那么對(duì)于文本、按鈕以及其他界面元素仍然應(yīng)當(dāng)堅(jiān)持用標(biāo)準(zhǔn)顏色。

設(shè)計(jì)時(shí)心里想著用戶

除非創(chuàng)建VisualBasic應(yīng)用程序完全只供自己使用,否則創(chuàng)作的價(jià)值只能由其他人來評(píng)價(jià)。應(yīng)用程序的用戶界面對(duì)用戶有極大的影響——無論代碼在技術(shù)上多么卓越,或者優(yōu)化得多么的好,如果用戶發(fā)現(xiàn)應(yīng)用程序很難使用,那么他們就難于很好地接受它。?作為程序員,毫無疑問,對(duì)計(jì)算機(jī)方面技術(shù)已非常熟悉。因而很容易忘記大多數(shù)用戶不理解(而且也許并不在意)隱藏在應(yīng)用程序后面的技術(shù)。把應(yīng)用程序看作達(dá)到目的工具:完成任務(wù)的方法想象中應(yīng)比沒有計(jì)算機(jī)的幫助更容易.

一個(gè)設(shè)計(jì)得好的用戶界面把用戶與基礎(chǔ)技術(shù)隔離開來,從而使完成預(yù)定的任務(wù)變得很容易。在設(shè)計(jì)應(yīng)用程序用戶界面的過程中,需要時(shí)時(shí)想到用戶.如何能無需指導(dǎo)就發(fā)現(xiàn)應(yīng)用程序的各種各樣的功能?當(dāng)錯(cuò)誤發(fā)生時(shí),應(yīng)用程序如何響應(yīng)?在幫助或輔助用戶方面將提供些什么?設(shè)計(jì)是否以一種藝術(shù)美來使用戶高興?以上這些問題的答案以及其他有關(guān)用戶為中心的設(shè)計(jì)問題,在本節(jié)中都將涉及到。

?界面設(shè)計(jì)的基礎(chǔ)?不必成為創(chuàng)建用戶界面的藝術(shù)家—-大多數(shù)用戶界面設(shè)計(jì)的原則,與任意一門基礎(chǔ)藝術(shù)課中所講授的基礎(chǔ)設(shè)計(jì)的原則相同。構(gòu)圖、顏色等的基本的設(shè)計(jì)原則,就像它們應(yīng)用在紙張或油畫上一樣,也能很好地在一臺(tái)計(jì)算機(jī)的屏幕上應(yīng)用。

雖然VisualBasic能通過簡(jiǎn)單地將控件拖動(dòng)并放置到窗體上而使得創(chuàng)建用戶界面非常容易,但是,在設(shè)計(jì)之前稍微計(jì)劃一下就能使應(yīng)用程序的可用性有很大地改觀??赡苄柘仍诩埳袭嫵龃绑w開始設(shè)計(jì),決定需要哪些控件,不同元素的相對(duì)重要性,以及控件之間的關(guān)系。

?構(gòu)圖:應(yīng)用程序的觀感與感覺?窗體的構(gòu)圖或布局不僅影響它的美感,而且也極大地影響應(yīng)用程序的可用性。構(gòu)圖包括諸如控件的位置、元素的一致性、動(dòng)感、空白空間的使用以及設(shè)計(jì)的簡(jiǎn)單性等因素。

控件的位置?在大多數(shù)界面設(shè)計(jì)中,不是所有的元素都一樣重要.仔細(xì)地設(shè)計(jì)是很有必要的,以確保越是重要的元素越要很快地顯現(xiàn)給用戶.重要的或者頻繁訪問的元素應(yīng)當(dāng)放在顯著的位置上,而不太重要的元素就應(yīng)當(dāng)降級(jí)到不太顯著的位置上。

在大多數(shù)語(yǔ)言中我們習(xí)慣于在一頁(yè)之中從左到右、自上到下地閱讀.對(duì)于計(jì)算機(jī)屏幕也如此,大多數(shù)用戶的眼睛會(huì)首先注視屏幕的左上部位,所以最重要的元素應(yīng)當(dāng)放在屏幕的左上部位.例如,如果窗體上的信息與客戶有關(guān),則它的名字字段應(yīng)當(dāng)顯示在它能最先被看到的地方.而按鈕,如“確定”或“下一個(gè)",應(yīng)當(dāng)放置在屏幕的右下部位;用戶在未完成對(duì)窗體的操作之前,通常不會(huì)訪問這些按鈕。

把元素與控件分成組也很重要。盡量把信息按功能或關(guān)系進(jìn)行邏輯地分組。因?yàn)樗麄兊墓δ鼙舜讼嚓P(guān),所以定位數(shù)據(jù)庫(kù)的按鈕應(yīng)當(dāng)被形象地分成一組,而不是分散在窗體的四處。對(duì)信息也是一樣,名字字段與地址通常分在一組,因?yàn)樗鼈兟?lián)系緊密。在許多情況下,可以使用框架控件來幫助加強(qiáng)控件之間的聯(lián)系。

?界面元素的一致性?在用戶界面設(shè)計(jì)中,一致性是一種優(yōu)點(diǎn)。一致的外觀與感覺可以在應(yīng)用程序中創(chuàng)造一種和諧,任何東西看上去都那么協(xié)調(diào)。如果界面缺乏一致性,則很可能引起混淆,并使應(yīng)用程序看起來非?;靵y、沒有條理、價(jià)值降低,甚至可能引起對(duì)應(yīng)用程序可靠性的懷疑。

為了保持視覺上的一致性,在開始開發(fā)應(yīng)用程序之前應(yīng)先創(chuàng)建設(shè)計(jì)策略和類型約定。諸如控件的類型、控件的尺寸、分組的標(biāo)準(zhǔn)以及字體的選取等設(shè)計(jì)元素都應(yīng)該在事先確定??梢詣?chuàng)建設(shè)計(jì)樣板來幫助進(jìn)行設(shè)計(jì).?在VisualBasic中有大量的控件可供使用,這可能引起有人想使用所有的控件。為了避免這種引誘,選取能很好地適合特定應(yīng)用程序的控件子集。雖然列表框、組合框、網(wǎng)格以及樹等控件都可用來表示信息列表,最好還是盡可能使用一種類型。?還有,盡量恰當(dāng)?shù)厥褂每丶m然TextBox控件可以設(shè)置成只讀并用來顯示文本,但Label控件通常更適用于該目的。在為控件設(shè)置屬性時(shí)請(qǐng)保持一致性,如果在一個(gè)地方為可編輯的文本使用白色背景,除非有很好的理由,否則不要在別的地方又使用灰色。?在應(yīng)用程序中不同的窗體之間保持一致性對(duì)其可用性有非常重要的作用。如果在一個(gè)窗體上使用了灰色背景以及三維效果,而在另一個(gè)窗體上使用白色背景,則這兩個(gè)窗體就顯得毫不相干。選定一種類型并在整個(gè)應(yīng)用程序保持一致,即使這意味著要重新設(shè)計(jì)某些功能。?

動(dòng)感:窗體與其功能匹配

動(dòng)感是對(duì)象功能的可見線索。雖然對(duì)這個(gè)術(shù)語(yǔ)也許還不熟悉,但動(dòng)感的實(shí)例四處可見。自行車上的把手,手放在它的上面,動(dòng)感會(huì)將把手用手扣緊這件事顯現(xiàn)出來.按下按鈕、旋轉(zhuǎn)旋鈕和點(diǎn)亮電燈的開關(guān)等都能進(jìn)行動(dòng)感表示,一看到它們就可以看出其用處。

用戶界面也使用動(dòng)感。例如,用在命令按鈕上的三維立體效果使得他們看上去像是被按下去的。如果設(shè)計(jì)平面邊框的命令按鈕的話,就會(huì)失去這種動(dòng)感,因而不能清楚地告訴用戶它是一個(gè)命令按鈕。在有些情況下,平面的按鈕也許是適合的,比如游戲或者多媒體應(yīng)用程序;只要在整個(gè)應(yīng)用程序中保持一致就很好。

文本框也提供了一種動(dòng)感,用戶可以期望帶有邊框和白色背景的框,框中包含可編輯的文本。顯示不帶邊框的文本框(BorderStyle=0)也有可能,這使它看起來像一個(gè)標(biāo)簽,并且不能明顯地提示用戶它是可編輯的.??空白空間的使用

在用戶界面中使用空白空間有助于突出元素和改善可用性??瞻卓臻g不必非得是白色的-—它被認(rèn)為是窗體控件之間以及控件四周的空白區(qū)域。一個(gè)窗體上有太多的控件會(huì)導(dǎo)致界面雜亂無章,使得尋找一個(gè)字段或者控件非常困難。在設(shè)計(jì)中需要插入空白空間來突出設(shè)計(jì)元素。

各控件之間一致的間隔以及垂直與水平方向元素的對(duì)齊也可以使設(shè)計(jì)更可用.就像雜志中的文本那樣,安排得行列整齊、行距一致,整齊的界面也會(huì)使其容易閱讀。?VisualBasic提供了幾個(gè)工具,使得控件的間距、排列和尺寸的調(diào)整非常容易。“排列"、“按相同大小制作”、“水平間距”、“垂直間距”和“在窗體中央"等命令都可以在“格式”菜單中找到。

?保持界面的簡(jiǎn)明

界面設(shè)計(jì)最重要的原則也許就是簡(jiǎn)單化。對(duì)于應(yīng)用程序而言,如果界面看上去很難,則可能程序本身也很難.稍稍深入考慮一下便有助于創(chuàng)建看上去(實(shí)際上也是)用起來都很簡(jiǎn)單的界面.從美學(xué)的角度來講,整潔、簡(jiǎn)單明了的設(shè)計(jì)常常更可取。?在界面設(shè)計(jì)中,一個(gè)普遍易犯的錯(cuò)誤就是力圖用界面來模仿真實(shí)世界的對(duì)象。例如,想象一下要求創(chuàng)建完整的保險(xiǎn)單的應(yīng)用程序.很自然的反應(yīng)就是在屏幕上設(shè)計(jì)完全仿照保險(xiǎn)單的界面.這樣做會(huì)出現(xiàn)幾個(gè)問題:保險(xiǎn)單的形狀與尺寸和屏幕上的有很大不同,要非常完善地復(fù)制這樣的表格會(huì)將其限制在文本框與復(fù)選框中,而對(duì)用戶并沒有真正的好處.?最好是設(shè)計(jì)出自己的、也能提供原始保險(xiǎn)單打印副本(帶打印預(yù)覽)的界面.通過從原始保險(xiǎn)單中創(chuàng)建字段的邏輯組,并使用有標(biāo)簽的界面或幾個(gè)鏈接的窗體,就可以不要求滾動(dòng)屏幕而顯示所有的信息。也可以使用附加的控件,比如帶有選取預(yù)裝入的列表框,這些控件可以減少打字工作量.

也可以取出不常用的函數(shù)并把它們移到它們自己的窗體中去,來簡(jiǎn)化許多應(yīng)用程序。提供缺省有時(shí)也可以簡(jiǎn)化應(yīng)用程序;如果十個(gè)用戶中有九個(gè)選取加粗的文本,就把文本粗

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論