版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
8 VB應(yīng)用程序界面設(shè)計(jì)任何一個(gè)應(yīng)用程序都有用戶界面,用戶界面是程序和用戶之間交換信息的主要接口。用VB創(chuàng)建一個(gè)應(yīng)用程序也需要?jiǎng)?chuàng)建一個(gè)用戶界面,它是用戶和應(yīng)用程序交互時(shí)的可見部分。窗體、菜單以及擺放在窗體上的各種各樣的控件構(gòu)成了用戶界面的基本構(gòu)造模塊,也是創(chuàng)建應(yīng)用程序所使用的對(duì)象,稱之為界面元素。8.1窗體設(shè)計(jì)8.1.1窗體的建立、添加和刪除窗體的建立正如前面各章節(jié)所見到的,當(dāng)打開VB創(chuàng)建一個(gè)新的應(yīng)用程序(工程)時(shí),它會(huì)自動(dòng)創(chuàng)建一個(gè)新的窗體,并將該窗體命名為“Form1.frm”。
窗體窗口位于屏幕中央,它的外觀就是一個(gè)標(biāo)準(zhǔn)的窗口。它的左上角是默認(rèn)圖標(biāo)和窗體標(biāo)題(默認(rèn)的標(biāo)題是窗體名“Form1”),右上角是最大化、最小化和關(guān)閉按鈕,窗體內(nèi)是程序工作區(qū),工作區(qū)充滿由點(diǎn)組成的網(wǎng)絡(luò)。窗體的添加
如果希望向已經(jīng)建立的工程中添加新窗體,有兩種方法可以實(shí)現(xiàn):
方法一:直接單擊命令按鈕條上的“添加窗體”工具按鈕,如圖8-1所示。這時(shí),將彈出“添加窗體”會(huì)話窗口,如圖8-2所示。從該窗口中選擇所要添加的窗體類型。
方法二:?jiǎn)螕簟疤砑哟绑w”工具按鈕右邊的下拉菜單箭頭,彈出下拉菜單,從中選擇添加窗體的類型選項(xiàng),如圖8-3所示。
另外,用戶在創(chuàng)建應(yīng)用程序時(shí),可以將過去所創(chuàng)建的窗體直接添加到現(xiàn)在的應(yīng)用程序中(即VB的窗體文件可以被不同的應(yīng)用程序所共享),這就是面向?qū)ο蟪绦蛟O(shè)計(jì)中的可重用性特點(diǎn)。具體操作方法是單擊“工程”菜單中的“添加文件”選項(xiàng),再選定指定的窗體文件名即可。也可以在圖8-2中選擇“現(xiàn)存”標(biāo)簽,彈出文件選擇公共對(duì)話窗。窗體的刪除在一個(gè)應(yīng)用程序的設(shè)計(jì)中,若發(fā)現(xiàn)某個(gè)窗體是多余的,就可以用刪除命令清除它。方法是先用鼠標(biāo)左鍵單擊要?jiǎng)h除的窗體(例如Form2),被選中的窗體呈高亮狀態(tài),然后單擊鼠標(biāo)右鍵,在彈出菜單中選擇“移除……”命令,就可以輕松刪除該窗體。如圖8-4所示。需要說明的是,上述操作僅僅是將選中的窗體從工程中刪除了,并沒有把窗體文件本身物理刪除,要想物理刪除它,可以用操作系統(tǒng)命令刪除之。3圖8-4將窗體從工程中刪除4
8.1.2窗體的設(shè)計(jì)準(zhǔn)則設(shè)計(jì)窗體時(shí)應(yīng)具體考慮以下三方面的特性:可用性可使用性是用戶接口界面設(shè)計(jì)中最重要的也是最基本的目標(biāo)。它包括:(1)使用的簡(jiǎn)單性,是指用戶接口界面的規(guī)模和組織的復(fù)雜程度。在完成用戶預(yù)定功能的前提下,應(yīng)當(dāng)使用戶界面越簡(jiǎn)單越好。(2)用戶接口界面中所用的術(shù)語應(yīng)該標(biāo)準(zhǔn)化和相互一致。例如,標(biāo)簽上的提示信息、命令按鈕的標(biāo)題和菜單標(biāo)題和下拉菜單項(xiàng)的命名都應(yīng)該使用通用的標(biāo)準(zhǔn)化專業(yè)術(shù)語。(3)用戶界面應(yīng)具有容錯(cuò)能力。如前所述的添加窗體方法,即可以用圖標(biāo)按鈕,又可以用下拉菜單。(4)應(yīng)具有HELP連機(jī)幫助功能。完善的幫助功能是衡量一個(gè)程序的重要性能指標(biāo)。靈活性考慮用戶的特點(diǎn)、能力和知識(shí)水平,應(yīng)使用戶界面能夠滿足不同水平的用戶的要求。用戶可以根據(jù)需要定制和修改界面。5可靠性可靠性是指無故障使用的間隔時(shí)間。用戶接口界面應(yīng)能保證用戶正確、可靠地使用系統(tǒng),保證有關(guān)程序和數(shù)據(jù)的安全性。即使用戶操作出現(xiàn)錯(cuò)誤,也應(yīng)該保證程序不崩潰,這個(gè)性能指標(biāo)又稱為程序的“健壯性”。8.1.3窗體的屬性設(shè)置窗體的常用屬性窗體的許多屬性會(huì)影響窗體的外觀。窗體的常用屬性如下:
Caption屬性:決定窗體標(biāo)題欄中顯示的文本。
Icon屬性:設(shè)置在窗體最小化時(shí)顯示的圖標(biāo)。
MaxButton
和MinButton屬性:決定窗體是否能夠最大化和最小化。
BorderStyle屬性:控制窗體如何調(diào)整大小。
Height和Width屬性:設(shè)置窗體的初始高度和寬度,包括窗體的邊界和標(biāo)題欄。
Left和Top屬性:設(shè)置窗體相對(duì)于屏幕左上角的位置。6
WindowState屬性:把窗體設(shè)置成在啟動(dòng)時(shí)最大化,最小化或正常大小。
Name屬性:設(shè)置窗體的名稱,在代碼中用這個(gè)名稱引用該窗體。它是VB對(duì)象的獨(dú)有標(biāo)識(shí)符,為VB對(duì)象賦予一個(gè)有意義的名字。它有一定的約定,如第一個(gè)窗體默認(rèn)名Form1,第二個(gè)窗體默名Form2。在應(yīng)用程序的代碼設(shè)計(jì)時(shí),經(jīng)常要引用對(duì)象的名稱,因此最好給Name屬性設(shè)置一個(gè)有實(shí)際意義的名稱,如主窗體命名為“frmMain”等。
Backcolor和ForeColor屬性:設(shè)置窗體的背景色和前景色,可以直接輸入十六進(jìn)制格式的數(shù)設(shè)置顏色,或者利用調(diào)色板,單擊其后的下拉箭頭,選擇調(diào)色板,再按自己想法選擇顏色。
Font屬性:設(shè)置窗體的字體類型。它包括字體種類、字體樣式、字體大小等內(nèi)容。
Moveable屬性:設(shè)置窗體是否可以被移動(dòng)。
ScaleHeight,ScaleWidth屬性:設(shè)置窗體的大小,即減去窗體邊界以及MDI框架所占尺寸后的內(nèi)部工作區(qū)大小。7
ScaleLeft,Scaletop屬性:設(shè)置窗體的坐標(biāo)系單位。前者用來描述橫坐標(biāo)系,后者用來描述縱坐標(biāo)系,它們可以修改坐標(biāo)原點(diǎn)。這些屬性的初始值都為0。
Visible屬性:利用它可以控制窗體是否顯示在屏幕上??梢栽诔绦蛟O(shè)計(jì)或程序運(yùn)行時(shí)改變?cè)搶傩灾?。在“屬性窗口”中設(shè)置窗體的屬性設(shè)計(jì)窗體的第一步就是設(shè)置它的屬性,這可以在設(shè)計(jì)狀態(tài)的“屬性窗口”中完成。為此,需要先打開屬性窗口,其方法有以下三種:方法一:右擊要修改窗體任一空白處,在彈出的快捷菜單中單擊“屬性窗口”選項(xiàng)。方法二:直接按F4鍵或工具按鈕。方法三:?jiǎn)螕粢晥D菜單中的“屬性窗口”選項(xiàng)。8
用代碼設(shè)置窗體的屬性除了在屬性窗口中設(shè)置窗體的屬性之外,還經(jīng)常需要在運(yùn)行工程時(shí),通過程序代碼來動(dòng)態(tài)設(shè)置窗體的屬性。其語法格式為:
WindowObjectNperty=value
窗體對(duì)象名.屬性類別=屬性值例如,為了使窗體Form1的標(biāo)題欄顯示“標(biāo)題欄的內(nèi)容是窗體裝載時(shí)用Caption屬性設(shè)置的”,并且在窗體上粘貼一張圖片“bbb.bmp”,可以在窗體的Form_Load()事件中加入下面的語句:PrivateSubForm_Load()Form1.Caption="標(biāo)題欄的內(nèi)容是窗體裝載時(shí)用Caption屬性設(shè)置的"
Form1.Picture=LoadPicture("d:\VB教程\窗體屬性\bbb.bmp")EndSub
程序的執(zhí)行結(jié)果如圖8-6所示。98.1.4設(shè)置窗體事件下面列出窗體的一些常用事件。
Initialize事件當(dāng)應(yīng)用程序創(chuàng)建Form窗體時(shí)發(fā)生該事件,它是每個(gè)窗體首先被自動(dòng)觸發(fā)的事件,而且它只在窗體第一次創(chuàng)建時(shí)觸發(fā)。此事件可初始化Form所用的數(shù)據(jù)。
Load、Unload事件當(dāng)應(yīng)用程序運(yùn)行時(shí)發(fā)生的第一個(gè)事件就是Load事件,它將窗體加載到內(nèi)存中。當(dāng)啟動(dòng)一個(gè)只帶一個(gè)窗體的程序時(shí),該窗體是自動(dòng)加載的,即Load事件是應(yīng)用程序自己觸發(fā)的。而Unload事件與Load事件相反,它將窗體移出內(nèi)存,但它只移走窗體的可視部分,而不是窗體的命令和程序。另外,要注意Initialize事件在Load事件之前發(fā)生。10
Activate、Deactivate事件若應(yīng)用程序包括多個(gè)窗體,則當(dāng)一個(gè)窗體變成活動(dòng)窗體時(shí),自動(dòng)產(chǎn)生Activate事件。而Deactivate只在輸入焦點(diǎn)從某一活動(dòng)窗口移動(dòng)到另一個(gè)窗體時(shí)自動(dòng)觸發(fā)。這兩個(gè)事件只在VB程序的多個(gè)窗體之間起作用,而不適用于VB程序與其他Windows程序之間。
Click、Db1Click事件當(dāng)用戶單擊窗體空白處時(shí)發(fā)生Click事件;當(dāng)用戶雙擊窗體空白處時(shí)發(fā)生Db1Click事件,雙擊時(shí)間間隔可以在Windows控制面板中調(diào)整。11
Resize事件當(dāng)用戶改變窗體的大小時(shí)觸發(fā)該事件。
VB窗體的事件類型比較多,學(xué)習(xí)的關(guān)鍵是要懂得事件怎樣工作,事件在什么時(shí)候被觸發(fā),以及事件是否會(huì)觸發(fā)其他相關(guān)事件。下面列出事件驅(qū)動(dòng)應(yīng)用程序中的事件執(zhí)行順序:(1)啟動(dòng)應(yīng)用程序,裝載、顯示窗體,觸發(fā)窗體的Load和Show事件。(2)窗體或窗體上的控件接收事件。事件可以由用戶引發(fā)(如用戶的鼠標(biāo)操作),可以由系統(tǒng)引發(fā)(如定時(shí)器事件),也可以由代碼間接引發(fā)(當(dāng)代碼裝載其他窗體時(shí)產(chǎn)生的Load事件)。(3)如果在相應(yīng)的事件過程中有代碼,就執(zhí)行代碼。(4)應(yīng)用程序等待下一次事件。12
8.1.5窗體的裝入、顯示和隱藏由于有多個(gè)窗體,而程序運(yùn)行時(shí),一次只能訪問一個(gè)窗體上的某一控件,所以如何裝入和顯示窗體、如何將窗體隱藏就顯得比較重要。在程序運(yùn)行時(shí),一個(gè)窗體所處的狀態(tài)有:未裝入窗體存在于磁盤(程序)文件中,不占用計(jì)算機(jī)內(nèi)存等資源,即介于物理存儲(chǔ)和邏輯存儲(chǔ)之間。裝入但不顯示窗體已經(jīng)裝入內(nèi)存,準(zhǔn)備顯示。此時(shí)窗體已經(jīng)占用了一部分內(nèi)存等資源,在需要時(shí)可以裝入工作區(qū)。裝入但不顯示主要考慮了兩方面的原因:(1)有些后臺(tái)作業(yè),沒有用戶接口界面,只需在程序運(yùn)行過程中,占用一部分CPU時(shí)間進(jìn)行后臺(tái)操作,此時(shí),可以只將窗體裝入內(nèi)存而不顯示。(2)事先裝入的窗體顯示時(shí)其顯示速度較快。13顯示窗體作為用戶界面已經(jīng)被顯示在屏幕上,用戶可以和窗體進(jìn)行交互。與窗體裝入、顯示、隱藏有關(guān)的命令有如下所示的語句。
Load語句:將一個(gè)窗體裝入內(nèi)存,但不顯示該窗體。其語法是:
LoadFormNameLoad窗體名
Unload語句:將一個(gè)窗體移出內(nèi)存,其語法是:
UnloadFormNameUnload窗體名
Show語句:對(duì)于一個(gè)未裝入的窗體,該語句將此窗體裝入并顯示,如果窗體已經(jīng)由Load語句裝入,該語句則顯示此窗體,其語法是:
FormName.Show[Mode]
窗體名.Show[模式整數(shù)值]14
FormName是要裝入、顯示或隱藏的窗體名,在Show語句中的“模式整數(shù)值(Mode)”參數(shù)是個(gè)可選項(xiàng),其取值只能是0或1,它的含義是:0——非模態(tài)窗體(缺省值)。1——模態(tài)窗體。模態(tài)窗體和非模態(tài)窗體的區(qū)別是,模態(tài)窗體占用整個(gè)應(yīng)用程序控制權(quán),在模態(tài)窗體顯示的狀態(tài)下,只有關(guān)閉該模態(tài)窗體,用戶才能與其他窗體進(jìn)行交互,而對(duì)于非模態(tài)窗體,用戶在跟此窗體進(jìn)行交互時(shí),還可以切換到其他窗體。因此對(duì)于模態(tài)窗體必須有關(guān)閉該窗體的選項(xiàng),如Close按鈕或關(guān)閉窗體的命令按鈕等。Show語句缺省認(rèn)為窗體是非模態(tài)的。調(diào)用Show方法與設(shè)置窗體Visible屬性為True具有相同的效果。
FormName.Visible=True15
8.1.6窗體的生命周期窗體是進(jìn)行應(yīng)用程序設(shè)計(jì)的主要地方,是控件的載體,一些程序運(yùn)行所必須的初始化操作(如給某些變量賦初值等)或退出前的善后工作(如退出程序之前應(yīng)提示用戶存盤等),一般需要在窗體創(chuàng)建以及退出時(shí)所觸發(fā)的事件中進(jìn)行一些代碼設(shè)計(jì)。所以,了解窗體從創(chuàng)建到卸載的整個(gè)過程,對(duì)我們進(jìn)行應(yīng)用程序的設(shè)計(jì)比較邪鎦通常VB窗體分4種狀態(tài):創(chuàng)建狀態(tài)、加載狀態(tài)、可見狀態(tài)和卸載狀態(tài)。窗體的創(chuàng)建狀態(tài)
Initialize事件是窗體創(chuàng)建狀態(tài)開始的標(biāo)志。因而放在Form_Initialize事件過程中的代碼,就是窗體創(chuàng)建時(shí)最先執(zhí)行的代碼,應(yīng)用此事件初始化窗體所用的數(shù)據(jù)。16處于創(chuàng)建狀態(tài)的窗體只作為一個(gè)對(duì)象而存在,還沒有具體窗口,而且它的控制也不存在,也就是說處于這個(gè)狀態(tài)下,只有窗體的代碼部分被裝入計(jì)算機(jī)內(nèi)存,而窗體的可視部分還沒有調(diào)入。雖然該狀態(tài)可能很短暫,但任何窗體都經(jīng)過這個(gè)狀態(tài)。例如,如果執(zhí)行Form1.Show,則窗體被創(chuàng)建,F(xiàn)orm_Initialize事件開始執(zhí)行,當(dāng)它執(zhí)行完成之后,該窗體才被加載,這是窗體的下一個(gè)狀態(tài)。另外,如下情況可以觸發(fā)Initialize事件:(1)用GreateObject函數(shù)創(chuàng)建類的一個(gè)實(shí)例,例如下面的語句:
SetX=GreateObject(“Project1.MyClass”)(2)引用窗體或類實(shí)例的屬性或事件,該屬性或事件由程序代碼自動(dòng)創(chuàng)建。
MyForm.Caption=“我的窗體”
窗體的加載狀態(tài)
Load事件是窗體加載狀態(tài)開始的標(biāo)志。當(dāng)窗體進(jìn)入加載狀態(tài)時(shí),F(xiàn)orm_Load事件過程中的代碼就被執(zhí)行。Form_Load事件過程開始后,窗體上的所有控件都被創(chuàng)建和加載,此時(shí)窗體還沒有被顯示出來,但是任何窗體只有被加載后才能顯示。很多窗體會(huì)自動(dòng)從創(chuàng)建狀態(tài)進(jìn)入加載狀態(tài)。窗體如果滿足以下條件之一就會(huì)被自動(dòng)加載:(1)該窗體在“工程屬性”對(duì)話框的“通用”選項(xiàng)卡被指定為啟動(dòng)窗體。(2)窗體中首先被調(diào)用的屬性或方法是Show方法,例如,執(zhí)行“Form1.Show”。(3)首先被調(diào)用的某個(gè)對(duì)象的屬性或方法是窗體內(nèi)部的成員,如調(diào)用了窗體的Move方法或使用了窗體中某個(gè)控件的屬性。(4)用Load語句加載窗體,如執(zhí)行“LoadForm1”。18上面所列的第1和第2種情況,在“Form_Load”執(zhí)行完成后,窗體就直接可見,而后面第3和第4種情況,窗體只是進(jìn)入加載狀態(tài),但不顯示。加載狀態(tài)是窗體的一個(gè)根狀態(tài),在任何時(shí)候,只要隱藏了窗體,它就總是從可見狀態(tài)回到加載狀態(tài)。但是回到加載狀態(tài)并不重新執(zhí)行Load事件。Form_Load事件過程在窗體的存活期中只被運(yùn)行一次。窗體的可見狀態(tài)使用窗體的Show方法,可以使窗體進(jìn)入可見狀態(tài)。當(dāng)窗體進(jìn)入可見狀態(tài)時(shí),用戶就可以看見窗體的窗口(也可以說從窗體狀態(tài)到窗口狀態(tài)),同時(shí)能和它進(jìn)行交互作用。要顯示應(yīng)用程序中的某個(gè)窗體,應(yīng)使用Show方法。例如,執(zhí)行“Form1.Show”。
要隱藏應(yīng)用程序中的某個(gè)窗體,應(yīng)使用Hide方法。如執(zhí)行“Form1.Hide”。當(dāng)一個(gè)窗體調(diào)用Hide方法以后,該窗體就從屏幕中移去,并且它的Visible屬性值被自動(dòng)設(shè)置為False,窗體返回加載狀態(tài),并無法用交互方式使用隱藏窗體上的控件。但是對(duì)于運(yùn)行中的VB應(yīng)用程序,隱藏窗體中的控件仍然是可以(用代碼)調(diào)用的。19。在程序中,要判斷一個(gè)窗體是否處于可見狀態(tài),可以使用它的Visible屬性:Ifform3.Visiblethen‘條件成立,表示窗體處于可見狀態(tài)?!璄lse‘條件不成立,表示窗體處于隱藏狀態(tài)?!璄ndIf窗體的卸載狀態(tài)窗體在卸載時(shí)可以是隱藏的,也可以是可見的。若沒有隱藏,則它將保持可見狀態(tài)直到窗體卸載完畢,所分配的內(nèi)存和資源完全被收回。窗體卸載前最后會(huì)自動(dòng)發(fā)生Unload事件。該事件發(fā)生前,還有一個(gè)重要的事件發(fā)生,即QueryUnload事件。QueryUnload事件提供了停止窗體卸載的機(jī)會(huì)。如果用戶在退出窗體時(shí),忘記了保存數(shù)據(jù),此時(shí)就可以提示用戶保存或忽略所做的更改。結(jié)束應(yīng)用程序當(dāng)所有窗體都已關(guān)閉并且沒有代碼正在執(zhí)行時(shí),事件驅(qū)動(dòng)的應(yīng)用程序就停止運(yùn)行。如果最后一個(gè)可見窗體關(guān)閉時(shí)仍有隱藏窗體存在時(shí),雖然看起來應(yīng)用程序已經(jīng)結(jié)束(因?yàn)闆]有可見的窗體了),但是實(shí)際上應(yīng)用程序仍在繼續(xù)運(yùn)行,直至所有隱藏窗體都關(guān)閉為止。如果應(yīng)用程序只有一個(gè)窗體,可以使用下面一條命令來結(jié)束應(yīng)用程序:
UnloadMe
如果應(yīng)用程序有一個(gè)以上的窗體,可以使用Forms集合和Unload語句。代碼如下:PrivateSubForm_Unload(CancleAsInteger)DimIAsInteger‘在Forms集合中循環(huán)并卸載每個(gè)窗體。
ForI=0TOForms.Count-1UnloadForms(I)NextIEndSub21
8.1.7窗體中的控件布局設(shè)計(jì)要在窗體窗口中添加控件,程序員可以單擊視圖菜單中的“對(duì)象窗口”選項(xiàng),或使用組合鍵Shift+F7來進(jìn)入窗體窗口。使用工具箱向窗體窗口添加控件有以下兩種方法:方法一:在選定的控件上雙擊鼠標(biāo),這時(shí)在窗體窗口的正中央出現(xiàn)一個(gè)標(biāo)準(zhǔn)大小的控件,同時(shí)四周出現(xiàn)8個(gè)黑塊,表示該控件為當(dāng)前被選中的活動(dòng)控件,這8個(gè)黑塊稱為控件的句柄,在調(diào)整控件的大小時(shí)要用到它。方法二:在選定的控件上單擊鼠標(biāo),該控件按鈕就會(huì)凹下去,同時(shí)鼠標(biāo)指針變成“+”形狀。將鼠標(biāo)指針移動(dòng)定位到窗體窗口相應(yīng)的位置,按下鼠標(biāo)左按鈕不放,拖動(dòng)拉出一個(gè)大小合適的區(qū)域,放開鼠標(biāo)左按鈕,就形成一個(gè)所需要的控件。22
控件的移動(dòng)和調(diào)整大小移動(dòng)控件,只需用鼠標(biāo)點(diǎn)中它,使之周圍出現(xiàn)8個(gè)小黑塊,也就是使該控件成為活動(dòng)控件,然后拖動(dòng)控件。調(diào)整大小,只需要將鼠標(biāo)放在活動(dòng)控件的控制句柄上,當(dāng)鼠標(biāo)指針變成雙向箭頭時(shí),就可以改變控件的長(zhǎng)度和寬度;若拖動(dòng)控件四個(gè)角上的小黑塊可使控件沿該方向放大或縮小??丶膹?fù)制與刪除有時(shí)在制作窗體上的控件時(shí),某些控件的屬性大致相同,此時(shí)只需先制作一個(gè)控件樣板,然后由它復(fù)制出一組控件,并稍作修改就可以得到我們所需制作的控件,這樣就避免對(duì)控件相同屬性值的重復(fù)設(shè)置,提高了編程效率。若將控件復(fù)制到同一窗體的其他地方,其他窗體上,或其他應(yīng)用程序中均可采取以下步驟完成:23
(1)首先選取控件,使其成為周圍出現(xiàn)小黑塊的活動(dòng)控件。(2)單擊編輯菜單中的“復(fù)制”選項(xiàng)或直接按組合鍵Ctrl+C,這時(shí)VB自動(dòng)將所選控件復(fù)制到剪貼板上。(3)在所需復(fù)制的新位置上單擊鼠標(biāo)左鍵。(4)單擊編輯菜單中的“粘貼”選項(xiàng)或直接按組合鍵Ctrl+V,這時(shí)屏幕上彈出一個(gè)對(duì)話框,問是否建立控件數(shù)組,選擇“否”就將所選控件復(fù)制到適當(dāng)位置。當(dāng)前窗體中的控件根據(jù)程序設(shè)計(jì)不需要時(shí),可以刪除它。方法是:先選中控件,然后按編輯菜單中的“刪除”選項(xiàng)或直接按Del鍵,即可刪除該控件。另外,控件的復(fù)制、粘貼、刪除等操作,可以通過右擊控件調(diào)出快捷菜單,再選擇相應(yīng)的“刪除”菜單項(xiàng)執(zhí)行。24
多個(gè)控件的移動(dòng)、復(fù)制和刪除對(duì)于多個(gè)控件同時(shí)進(jìn)行操作時(shí),可選中某一個(gè)控件,同時(shí)按住Ctrl鍵或Shift鍵不放,再用鼠標(biāo)分別單擊其他控件,這時(shí)被選中的控件上的句柄全部變?yōu)榛疑?,表示多個(gè)控件同時(shí)成為活動(dòng)控件,然后放開Ctrl鍵或Shift鍵,按上述移動(dòng)、復(fù)制和刪除方法對(duì)其中一個(gè)控件操作,被選中的所有控件也會(huì)隨之進(jìn)行相應(yīng)操作。8.1.8啟動(dòng)窗體的設(shè)置除了窗體設(shè)計(jì)原理以外,還需要考慮應(yīng)用程序從什么地方開始執(zhí)行以及到什么地方結(jié)束。VB提供了一些技巧用于決定應(yīng)用程序啟動(dòng)時(shí)的外觀。另外,熟悉應(yīng)用程序卸載時(shí)進(jìn)行的一些處理也很重要。25
設(shè)置啟動(dòng)窗體在VB的一個(gè)應(yīng)用程序中可能含有多個(gè)窗體,那么,在應(yīng)用程序被執(zhí)行時(shí),哪一個(gè)窗體先被執(zhí)行呢?在默認(rèn)情況下,應(yīng)用程序中的第一個(gè)窗體(可以通過工程資源管理器窗口確定)被指定為啟動(dòng)窗體,如果想從其它的窗體啟動(dòng)應(yīng)用程序,那么就得改變啟動(dòng)窗體。改變啟動(dòng)窗體的方法有如下步驟:(1)從“工程”菜單中,單擊“工程屬性”選項(xiàng)。(2)在顯示的“工程屬性”對(duì)話框中,選擇“通用”選項(xiàng)卡。(3)在“啟動(dòng)對(duì)象”下拉列表框中,選擇要作為新啟動(dòng)窗體的窗體(Form2),如圖8-7所示。(4)單擊“確定”按鈕。26圖8-7在“工程屬性”會(huì)話窗口的“通用”標(biāo)簽設(shè)置啟動(dòng)窗體27
沒有啟動(dòng)窗體時(shí)的啟動(dòng)有時(shí)候也需要應(yīng)用程序啟動(dòng)時(shí)不加載任何窗體。例如,在設(shè)計(jì)程序時(shí)可能想先運(yùn)行裝入數(shù)據(jù)文件的代碼,然后根據(jù)數(shù)據(jù)文件的內(nèi)容顯示幾個(gè)不同窗體中的某一個(gè),或者先顯示一個(gè)要求輸入口令的對(duì)話框確認(rèn)用戶的身份等。要做到這一點(diǎn),可以在工程中添加一個(gè)標(biāo)準(zhǔn)模塊Modul1,在標(biāo)準(zhǔn)模塊(可從工程資源管理器中實(shí)現(xiàn))中創(chuàng)建一個(gè)名為Main的子過程,子過程的代碼如下。SubMain()Dimprompt,title,passwordprompt="請(qǐng)輸入口令"
title="用戶注冊(cè)"
password=InputBox(prompt,title)Ifpassword=""Then‘如果不輸入口令,直接退出程序。
ExitSubEndIf28Ifpassword="123456"ThenMsgBox("歡迎使用Form1!"),vbInformation,titleForm1.Show‘顯示Form1。ElseMsgBox“對(duì)不起,你不是合法用戶!只能使用
Form2",vbCritical,titleForm2.Show‘顯示Form2。EndIfEndSub
添加標(biāo)準(zhǔn)模塊后的工程資源管理器中列出的對(duì)象如圖8-8所示。29
8-8添加標(biāo)準(zhǔn)模塊后的工程資源管理器中列出的對(duì)象30
另外,Main過程必須是一個(gè)位于標(biāo)準(zhǔn)模塊的子過程,不能在窗體模塊內(nèi)。要將SubMain過程設(shè)置為啟動(dòng)對(duì)象,可以從工程菜單中選擇“工程屬性”,再選擇“通用”選項(xiàng)卡,最后從“啟動(dòng)對(duì)象”下拉列表框中選擇“SubMain”,如圖8-9所示。圖8-9設(shè)置程序從標(biāo)準(zhǔn)模塊啟動(dòng)31
8.2菜單設(shè)計(jì)菜單是Windows操作系統(tǒng)用戶接口的最重要的組成部分。菜單可以將大量的用戶命令集成到若干個(gè)菜單項(xiàng)中,使用戶不必記憶和輸入大量的命令。8.2.1菜單編輯器
VB中菜單和菜單下的菜單項(xiàng)都是控件,使用它們與命令按鈕這樣的控件沒有什么區(qū)別,只不過在窗體中創(chuàng)建菜單時(shí)不用工具箱中的控件,而是要打開一個(gè)菜單設(shè)計(jì)窗口(即菜單編輯器窗口),在此窗口中完成菜單的各項(xiàng)設(shè)計(jì)。要設(shè)計(jì)菜單,首先應(yīng)該打開菜單編輯器窗口。其方法有如圖8-10所示的以下三種:(1)執(zhí)行“工具”菜單中的“菜單編輯器(M)”命令。(2)直接按組合鍵“Ctrl+E”。(3)單擊工具條上的工具按鈕。32
圖8-11空白的菜單編輯器窗口33圖8-11所示的菜單編輯器窗口中包括以下內(nèi)容。標(biāo)題(Caption)
該屬性用于輸入在菜單條上顯示的字符串。它是一個(gè)文本框,用來輸入菜單標(biāo)題或菜單項(xiàng)顯示在窗體上的標(biāo)題。輸入的內(nèi)容同時(shí)在窗口的最下面文本區(qū)顯示出來。如果設(shè)計(jì)的菜單標(biāo)題需要加熱鍵表示時(shí),既菜單標(biāo)題的某個(gè)字母下顯示一個(gè)下劃線,程序運(yùn)行時(shí),按Alt鍵和帶下劃線的字母,就可以選擇菜單項(xiàng)執(zhí)行命令。只需在輸入該菜單標(biāo)題時(shí),在熱鍵字母前輸入一個(gè)“&”符號(hào)即可。例如,建立文件菜單時(shí),在標(biāo)題文本框內(nèi)輸入“文件(&F)”,程序運(yùn)行時(shí),顯示為“文件(F)”,此時(shí)可用Alt+F選擇它。菜單名(Name)
該屬性用于標(biāo)識(shí)一個(gè)菜單項(xiàng)。每個(gè)菜單項(xiàng)必須有一個(gè)控件名。在名稱文本框中輸入的字符是VB使用的控件名,它不會(huì)在窗體中顯示出來,而是在程序中用來標(biāo)識(shí)各菜單項(xiàng)控件,用于菜單項(xiàng)的Click事件過程。直到所有的菜單項(xiàng)都輸入了控件名,才可以離開菜單編輯器。34
索引號(hào)(Index)
該屬性用于生成菜單命令數(shù)組,此時(shí)所有的菜單名均相同,用索引號(hào)來區(qū)分不同的菜單項(xiàng)。復(fù)選(Checked)
該屬性為True時(shí),在菜單項(xiàng)邊上顯示復(fù)選標(biāo)記;為False時(shí),去掉該復(fù)選標(biāo)記。此屬性和下面的Enable、Visible屬性均可以在菜單設(shè)計(jì)器中設(shè)置,也可以在運(yùn)行時(shí)由代碼設(shè)置。它決定是否允許在菜單項(xiàng)的左邊設(shè)置復(fù)選標(biāo)記。若在菜單編輯窗口中單擊此框,那么當(dāng)前被選中的菜單項(xiàng)加入一個(gè)“√”,在窗體中顯示的該菜單項(xiàng)左邊出現(xiàn)一個(gè)“√”。通常用它在程序運(yùn)行時(shí)指出切換選項(xiàng)的開關(guān)狀態(tài)。35
有效(Enabled)
該屬性為False時(shí),菜單項(xiàng)變灰,此時(shí)選中該菜單項(xiàng)不能執(zhí)行代碼。此選項(xiàng)決定是否讓菜單項(xiàng)對(duì)事件做出響應(yīng)。當(dāng)“有效”復(fù)選框被選中,表示當(dāng)前高亮度的菜單項(xiàng)為可以執(zhí)行的;而它未被選中時(shí),相應(yīng)菜單項(xiàng)在執(zhí)行時(shí)變成灰色,表示不能被用戶操作。可見(Visible)
該屬性為False時(shí),菜單項(xiàng)不可見。此選項(xiàng)決定菜單項(xiàng)在程序運(yùn)行時(shí)是否被顯示。若此框被選中,表示當(dāng)前菜單項(xiàng)在程序運(yùn)行時(shí)被顯示出來,否則該菜單項(xiàng)不在窗體中顯示出來。如果一個(gè)菜單項(xiàng)是不可見的,則其所有子菜單也是不可見的。顯示窗口列表(WindowList)
該選項(xiàng)在多文檔界面(MDI)應(yīng)用程序中,確定菜單控件是否包含一個(gè)打開的MDI子窗體列表。36
快捷方式(ShortCut)該屬性設(shè)置菜單項(xiàng)的快捷方式,即用于建立菜單項(xiàng)的快捷鍵。當(dāng)我們需要為某菜單項(xiàng)建立快捷鍵時(shí),單擊該框右側(cè)的向下箭頭,便會(huì)下拉一個(gè)列表框,從中選擇所需的快捷鍵。幫助上下文ID(HelpID)
該屬性用于制作幫助菜單時(shí),為幫助文件設(shè)置ID號(hào),通過它可以找到幫助文件中相應(yīng)幫助主題的標(biāo)題。協(xié)調(diào)位置(POsition)
每個(gè)單獨(dú)的菜單控件都具有該屬性,它決定在激活對(duì)象的菜單時(shí),窗體頂層菜單如何在窗體中顯示。包括四個(gè)選項(xiàng):(1)0(None)—(缺省值)窗體的菜單不在菜單欄中顯示。(2)1(Left)—窗體的菜單在菜單欄的左邊位置顯示。(3)2(Middle)—窗體的菜單在菜單欄的中間位置顯示。(4)3(Right)—窗體的菜單在菜單欄的右邊位置顯示。37
四個(gè)箭頭按鈕右箭頭“”和左箭頭“”表示當(dāng)前設(shè)計(jì)的菜單是主菜單還是子菜單,即為菜單層次選擇按鈕。一共可以創(chuàng)建四個(gè)菜單等級(jí)。當(dāng)設(shè)計(jì)好菜單標(biāo)題及名稱后,若不按按鈕表示此菜單項(xiàng)為主菜單,即第一層菜單。若建立好一個(gè)菜單項(xiàng)后,按右箭頭,則此項(xiàng)內(nèi)容在文本區(qū)向右移一層,前面加省略號(hào)(…),表示該菜單項(xiàng)為下一級(jí)菜單,依次類推,再按“”,表示再下拉一級(jí)。用鼠標(biāo)可以在菜單顯示文本區(qū)中上下移動(dòng)高亮度條,選擇某菜單項(xiàng)后,再按“”,前面的省略號(hào)被取消,表示將該菜單又提升為主菜單。上箭頭和下箭頭表示將菜單顯示文本區(qū)中選中的菜單項(xiàng)與其上邊和下邊菜單項(xiàng)之間交換位置,使被選中的菜單項(xiàng)上移或下移一行。它用于在同等級(jí)菜單中改變菜單項(xiàng)的位置。38“下一個(gè)”命令按鈕它將選項(xiàng)移動(dòng)到下一行,表示當(dāng)前菜單項(xiàng)已建好,換行再創(chuàng)建下一個(gè)菜單項(xiàng)。它和單擊不同菜單項(xiàng)的效果一樣。“插入”命令按鈕單擊插入命令按鈕,可以在當(dāng)前被選中的菜單項(xiàng)之前插入一個(gè)新的空白菜單項(xiàng)?!皠h除”命令按鈕用于刪除被選中的菜單項(xiàng)。8.2.2創(chuàng)建菜單菜單作為用戶界面的一個(gè)重要組成部分,為用戶提供了直觀地操作應(yīng)用程序的重要手段,它在很大程度上是決定應(yīng)用程序是否成功的一個(gè)重要因素。如果應(yīng)用程序要為用戶提供一組命令,那么菜單是一種給命令分組的簡(jiǎn)便方法,并且用戶很容易訪問這些命令。圖8-12為一個(gè)“人力資源信息智能管理系統(tǒng)”的菜單欄。39圖8-12“人力資源信息智能管理系統(tǒng)”的菜單欄40設(shè)計(jì)菜單的主要步驟如下:(1)選取要添加菜單的窗體。(2)打開菜單編輯器。(3)在“標(biāo)題”文本框中輸入菜單標(biāo)題,例如“部門(&B)”。(4)按Tab鍵,將插入點(diǎn)移到下一個(gè)文本框“名稱”輸入菜單控件名,例如“Menu_bumen”。(5)單擊“下一個(gè)”按鈕,輸入第一個(gè)菜單標(biāo)題下的菜單項(xiàng)。為此,必須按“”按鈕,出現(xiàn)“”,然后再輸入菜單項(xiàng)的標(biāo)題,例如“部門維護(hù)”。接下來重復(fù)本步驟,輸入“部門”下的第二個(gè)菜單項(xiàng)“部門瀏覽”。為了給“部門瀏覽”菜單項(xiàng)增加“快捷鍵”,可以如下操作:?jiǎn)螕簟翱旖萱I(S)”下拉列表框,從其顯示的列表框中選擇“Ctrl+B”作為菜單項(xiàng)“部門瀏覽”的快捷鍵。(6)同樣的方法設(shè)計(jì)右邊的菜單標(biāo)題“職員”及其菜單項(xiàng)“職員維護(hù)”、“職員查詢”和“通訊錄”等。(7)如果要調(diào)整菜單標(biāo)題的先后順序,可以先選中要移動(dòng)的標(biāo)題,單擊“”箭頭或“”。設(shè)計(jì)完菜單之后,菜單編輯器內(nèi)的內(nèi)容如圖8-13所示。41圖8-13人力資源信息智能管理系統(tǒng)”的菜單編輯器內(nèi)容42編寫菜單事件代碼它的事件編寫方法與其他控件一樣,所不同的是菜單控件只響應(yīng)一個(gè)Click事件,當(dāng)用鼠標(biāo)或鍵盤選中該菜單控件時(shí),將激活該事件。每個(gè)菜單項(xiàng)都有一個(gè)事件處理程序“菜單控件名-lick()”。在設(shè)計(jì)狀態(tài)下,只要單擊窗體菜單欄的某個(gè)菜單標(biāo)題,就直接進(jìn)入代碼窗口,并且自動(dòng)出現(xiàn)被單擊過的菜單標(biāo)題的事件過程括號(hào)(過程頭和過程尾)。在窗體設(shè)計(jì)狀態(tài),單擊菜單欄中的“退出(X)”標(biāo)題,可以為該菜單命令填寫如下代碼:
PrivateSubM_exit_Click()‘M_exit是“退出(X)”標(biāo)題的控件名稱。
UnloadMeEndEndSub43在菜單之間插入分割線菜單之間要用一根直線將一組菜單項(xiàng)分割開來,形成若干菜單選項(xiàng)組,一般說來,這種選項(xiàng)組是按菜單項(xiàng)的功能而結(jié)合在一起的。分割線也是一個(gè)菜單控件,但它的“標(biāo)題”框中只能輸入“-”(減號(hào)),而且它不能響應(yīng)Click事件和不能被選取。在菜單編輯器插入分割線的方法如下:(1)如果想在現(xiàn)有的菜單中增加一條分割線,應(yīng)按“插入”按鈕,在想要分割開來的菜單項(xiàng)之間插入一個(gè)菜單控件。(2)在“標(biāo)題”文本框中輸入字符“-”。(3)設(shè)置“名稱”屬性。雖然分割線控件不能響應(yīng)Click事件,但也必須給它取一個(gè)名字。(4)單擊“確定”命令按鈕。例如,在圖8-14中,“檔案”標(biāo)題下有四個(gè)菜單項(xiàng),前兩個(gè)為個(gè)一組,后兩個(gè)為另一組。44
定義菜單項(xiàng)的訪問鍵和快捷鍵圖8-15顯示的“檔案”標(biāo)題下的菜單項(xiàng)“檔案檢索---輸入條件檢索”具有快捷鍵Ctrl+D,要注意它與“檔案”標(biāo)題的訪問鍵“&D”的區(qū)別:訪問鍵“&D”是在“標(biāo)題”文本框中通過輸入“&D”來定義,它在打開菜單時(shí),通過按下所賦值的字符(訪問鍵)來選取控件??旖萱ICtrl+D是在“快捷鍵(S)”下拉列表框中直接選取,程序運(yùn)行時(shí)在用戶不打開菜單的情況下直接按下該組合鍵,就可以執(zhí)行該菜單項(xiàng)命令。菜單中不能重復(fù)定義相同的訪問鍵或快捷鍵。一般來說快捷鍵訪問控件的執(zhí)行速度比用訪問鍵的方式快,但在設(shè)計(jì)應(yīng)用程序時(shí)最好不要定義過多的快捷鍵,否則會(huì)加重用戶的記憶負(fù)擔(dān)。最好只給使用頻繁的菜單命令定義。45
在程序運(yùn)行時(shí)動(dòng)態(tài)增減菜單項(xiàng)一般情況下,一個(gè)菜單中的菜單項(xiàng)是固定不變的??墒怯行┎藛慰梢愿鶕?jù)當(dāng)前環(huán)境的變化,適當(dāng)?shù)馗淖兡承┻x項(xiàng)。用一條語句,就可以實(shí)現(xiàn)動(dòng)態(tài)增減菜單項(xiàng)的目的。如果要隱藏某個(gè)菜單項(xiàng),只須將它的Visible屬性值設(shè)置為False,該菜單項(xiàng)就會(huì)從菜單中消失。如果要顯示某個(gè)隱藏的菜單項(xiàng),只要將它的Visible屬性值設(shè)置為True。
如果用戶在菜單編輯器中,只要清除“可見”復(fù)選框,就可以將選項(xiàng)中的菜單項(xiàng)隱藏起來。在菜單中使用復(fù)選標(biāo)記要設(shè)置菜單項(xiàng)的復(fù)選標(biāo)記,只需要設(shè)置控件的“復(fù)選(Checked)”屬性即可。Checked屬性為True時(shí),該菜單項(xiàng)的前面會(huì)出現(xiàn)一個(gè)“√”;當(dāng)Checked的屬性為False時(shí),“√”標(biāo)記消失。例如,下面的語句在菜單項(xiàng)“Dangan_chaxun”的前面加上“√”。Dangan_chaxun.Checked=True‘給“檔案_查詢”菜單項(xiàng)設(shè)置復(fù)選標(biāo)記。如果程序員要在菜單編輯器中設(shè)置菜單項(xiàng)的初始狀態(tài)就顯示“√”,只須選中該菜單項(xiàng),然后單擊“復(fù)選(C)”復(fù)選框。46
創(chuàng)建子菜單一些菜單項(xiàng)名字的右側(cè)帶有三角“”表示它下面還有一級(jí)子菜單,當(dāng)鼠標(biāo)指向該菜單項(xiàng)時(shí),就會(huì)自動(dòng)彈出下一級(jí)子菜單,如圖8-14所示。以下幾種情況需要?jiǎng)?chuàng)建子菜單:菜單欄已經(jīng)滿;某一特定菜單控件很少被用到;要突出某一菜單控件與另一個(gè)的關(guān)系。在VB中可以用菜單編輯器簡(jiǎn)單地實(shí)現(xiàn)該功能,它一共可以創(chuàng)建四個(gè)子菜單等級(jí)。在菜單編輯器中,凡不是菜單標(biāo)題控件下縮進(jìn)的任何菜單控件,都是子菜單控件。一般情況下,子菜單控件可以包括子菜單項(xiàng)、分割線和子菜單標(biāo)題。創(chuàng)建子菜單的方法如下:(1)在菜單編輯器中,先建立作為子菜單標(biāo)題的菜單項(xiàng)。(2)建立出現(xiàn)在子菜單中的各個(gè)菜單項(xiàng)。(3)單擊右箭頭“”將它們縮進(jìn),使它們的縮進(jìn)級(jí)別比子菜單標(biāo)題的級(jí)別低一級(jí)。在圖8-14中,“檔案檢索”是個(gè)子菜單標(biāo)題,在它下面又定義了兩個(gè)子菜單項(xiàng):“按部門檢索”和“輸入條件檢索”。運(yùn)行時(shí),子菜單標(biāo)題“檔案檢索”的右邊將出現(xiàn)包含子菜單符號(hào)“”。和第(3)步類似,可以在選中某個(gè)子菜單項(xiàng)之后,單擊左箭頭“”將其提升一個(gè)級(jí)別。47
名字后面有省略號(hào)……的菜單項(xiàng)在菜單編輯器的標(biāo)題文本框輸入的菜單名字后面加上一個(gè)省略號(hào)“……”,這是Windows下的一種慣例,在設(shè)計(jì)自己的菜單時(shí),不要隨意修改。幾乎所有的Windows應(yīng)用程序都通過菜單實(shí)現(xiàn)各種操作。菜單的基本作用是提供人機(jī)對(duì)話的界面,以便讓使用者選擇應(yīng)用系統(tǒng)的各種功能,同時(shí)管理應(yīng)用系統(tǒng),控制各種功能模塊的運(yùn)行。所以,菜單設(shè)計(jì)是整個(gè)程序設(shè)計(jì)合理與否的重要性能指標(biāo),也能體現(xiàn)一種設(shè)計(jì)風(fēng)格。本節(jié)介紹的方法只是初步的,必須通過大量的設(shè)計(jì)開發(fā)實(shí)踐和學(xué)習(xí)研究成功軟件的案例,才能掌握其要旨。圖8-14示出了“人力資源管理系統(tǒng)”菜單實(shí)際的結(jié)果。48498.2.3創(chuàng)建彈出式菜單彈出式菜單是直接顯示于窗體上,獨(dú)立于菜單欄的浮動(dòng)式菜單。它的建立方法與普通菜單一樣,也是在菜單編輯器中進(jìn)行的。在圖8-14所示的菜單上,“退出”菜單標(biāo)題右面還有一個(gè)叫做“幫助”的菜單標(biāo)題(名稱屬性值為:M_bangzhu),它有兩個(gè)菜單項(xiàng):“主題”和“關(guān)鍵字”,設(shè)計(jì)時(shí),只要將菜單標(biāo)題“幫助”的“Visable”屬性設(shè)置為“Faulse”即可。彈出式菜單在窗體上的顯示位置取決于單擊時(shí)指針的位置,顯示在彈出式菜單上的項(xiàng)取決于鼠標(biāo)右鍵按下時(shí)指針的位置,因此彈出式菜單也稱為上下文菜單。彈出式菜單提供了一種訪問上下文命令的高效方法。只要窗體中包含有一個(gè)菜單項(xiàng),運(yùn)行時(shí)就可以顯示出彈出式菜單。在VB中使用PopupMenu方法來創(chuàng)建彈出式菜單。50
PopupMenu方法的功能是在Form窗體上的當(dāng)前鼠標(biāo)位置或指定的坐標(biāo)位置顯示彈出式菜單,它不支持命名參數(shù)。其語法是:[object.]popupMenumenuname,flags,X,Y,boldcommand][對(duì)象名.]popupMenu彈出菜單名[,位置標(biāo)志常數(shù),X,Y,粗體顯示的菜單控件名]“對(duì)象名.(object.)”是可選的,缺省時(shí)是指當(dāng)前窗體。其中,Menuname參數(shù)表示要顯示的彈出式菜單名,并且指定的菜單必須含有至少一個(gè)子菜單項(xiàng)?!癋lags”參數(shù)是可選的,在popupMenu方法中使用Flags參數(shù)可以進(jìn)一步定義彈出式菜單的位置與性能。位置標(biāo)志如表8.2所示。5152
PopupMenu方法使菜單顯示更方便。使用它時(shí)應(yīng)先確定由哪個(gè)事件觸發(fā)彈出式菜單。通常的觸發(fā)事件是鼠標(biāo)(MouseUp或MouseDown)事件。如果要在窗體被鼠標(biāo)右鍵單擊事件中增加一個(gè)彈出式菜單。只須在代碼窗口中加入下面一段代碼:PrivateSubForm_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)IfButton=2Then‘檢查是否單擊了鼠標(biāo)右鍵(返回整數(shù)2)。
PopupMenuM_bangzhu‘彈出一個(gè)名稱叫做"M_Bangzhu"的彈出式菜單。
EndIfEndSub運(yùn)行時(shí),將鼠標(biāo)放在窗體空白處(標(biāo)題欄下方,圖片上方為工具條預(yù)留的地方),單擊右鍵,即可彈出一個(gè)菜單,如圖8-15所示。53圖8-15在窗體空白處單擊鼠標(biāo)右鍵時(shí)的彈出菜單54
8.3工具條設(shè)計(jì)8.3.1Toolbar控件的有關(guān)概念
Toolbar控件的構(gòu)成和用途
Toolbar控件由Buttons集合中的一個(gè)或多個(gè)Button對(duì)象構(gòu)成。在設(shè)計(jì)時(shí)和運(yùn)行時(shí),均可創(chuàng)建Button對(duì)象。每個(gè)按鈕可有圖象、標(biāo)題、工具提示文本,并且可以同時(shí)具有上述三種特性。每個(gè)按鈕對(duì)象還有Style屬性,該屬性決定了按鈕的行為。Toolbar控件包含用來創(chuàng)建工具條的Button對(duì)象的集合。工具條可以與應(yīng)用程序相關(guān)聯(lián)。一般情況下,工具條中的按鈕與菜單中的菜單項(xiàng)相對(duì)應(yīng),可以用它們來訪問應(yīng)用程序最常用的功能和命令。Toolbar控件也可以包含其它VB內(nèi)部控件,例如ComboBox控件或TextBox控件等。要?jiǎng)?chuàng)建工具條,必須先將Button對(duì)象加入Buttons集合,每個(gè)Button對(duì)象可以擁有可選的文本,并且擁有相關(guān)聯(lián)的ImageList控件提供的圖象??梢杂肅aption屬性為每個(gè)Button對(duì)象設(shè)置文本,用Image屬性設(shè)置圖象。在設(shè)計(jì)時(shí),可以通過“Toolbar屬性”對(duì)話框加入Button對(duì)象。在運(yùn)行時(shí),可以用Add和Remove方法將Button對(duì)象加入或刪除Buttons集合。55要在設(shè)計(jì)時(shí)添加其它VB內(nèi)部控件,只需將需要的控件拖入工具條即可。在運(yùn)行時(shí),雙擊工具條將彈出“自定義工具條”對(duì)話框,以便用戶隱藏、顯示或重新安排工具條的按鈕??梢杂肁llowCustomize屬性選用或禁止該對(duì)話框。還可以用Customize方法彈出“自定義工具條”對(duì)話框,如果需要保存或恢復(fù)工具條的狀態(tài),或允許最終用戶這樣做,可以使用SaveToolbar和RestoreToolbar方法。
Toolbar控件有如下三種用途:(1)用一致的工具條為不同應(yīng)用程序提供統(tǒng)一風(fēng)格的界面。(2)為常用功能,例如文件操作,提供簡(jiǎn)便的訪問方法。(3)為應(yīng)用程序提供圖形化的直觀界面。56將ImageList控件與toolbar控件相關(guān)聯(lián)工具條通常用圖標(biāo)代表應(yīng)用程序的功能,例如,用“磁盤”圖標(biāo)代表“文件保存”功能、用“打印機(jī)”圖標(biāo)代表“打印”功能和用“紙上的放大鏡”代表“打印預(yù)覽”功能等等。要使工具條能夠顯示這樣的圖象,必須首先將預(yù)先準(zhǔn)備好了的ImageList控件與Toolbar控件相關(guān)聯(lián)。這項(xiàng)工作在設(shè)計(jì)時(shí)和運(yùn)行時(shí)均可完成。要在設(shè)計(jì)時(shí)將ImageList控件和Toolbar控件相關(guān)聯(lián),可以按如下順序操作:(1)在ImageList控件中裝入預(yù)先準(zhǔn)備的用于Toolbar控件上的全部圖象。方法如下:用鼠標(biāo)右鍵單擊窗體上的ImageList控件;在彈出菜單中單擊“屬性(R)”后彈出如圖8-16所示屬性會(huì)話窗口;單擊“插入圖片(P)……”。57
圖8-16在ImageList控件中裝入用于Toolbar控件上的圖象58
(2)用鼠標(biāo)右鍵單擊Toolbar控件,并單擊“屬性”打開“屬性頁”對(duì)話框。(3)在“通用”選項(xiàng)卡中,單擊“圖象列表(I)”選擇需要的ImageList控件。如圖8-17中的名為ImageList1的控件。圖8-17選擇與Toolbar控件相關(guān)聯(lián)的ImageList控件59在運(yùn)行時(shí)將ImageList控件與Toolbar控件相關(guān)聯(lián),只需將Toolbar控件的ImageList屬性設(shè)置為ImageList控件的名稱,如下面示例代碼所示:
PrivateSubForm_Load()
myTools.ImageList=myImage
‘Toolbar控件名為“myTools”,EndSub‘ImageList控件名為“myImage。8.3.2Toolbar控件的設(shè)計(jì)要點(diǎn)在工具箱中添加ActiveX控件
Toolbar控件是一組ActiveX控件的一部分,這組自定義控件可以在文件MSCOMCTL.OCX中找到(如圖8-18C所示)。為了在應(yīng)用程序中使用Toolbar控件,必須將文件MSCOMCTL.OCX添加到工程中。在發(fā)行應(yīng)用程序時(shí),將文件MSCOMCTL.OCX安裝到用戶的MecrosoftWindows的System文件夾或WindowsNT的System32文件夾下。60
在設(shè)計(jì)時(shí)創(chuàng)建按鈕在設(shè)計(jì)時(shí)創(chuàng)建Button控件的步驟如下:(1)用鼠標(biāo)右鍵單擊Toolbar控件,并單擊“屬性”顯示出“屬性頁”對(duì)話框。(2)單擊“按鈕”選項(xiàng)卡,顯示如圖8-19所示對(duì)話框。(3)單擊“插入按鈕(N)”,可以在當(dāng)前按鈕后面加入新的Button對(duì)象。(4)設(shè)置當(dāng)前按鈕的屬性,例如關(guān)鍵字(Key)、標(biāo)題(Caption)、圖象(ImaGe)和工具提示文本(ToolTipTeXt)。(5)單擊“樣式”框,并選中一種樣式,設(shè)置Button對(duì)象的Style屬性。61圖8-19在設(shè)計(jì)狀態(tài)下添加或刪除Button控件,設(shè)置屬性62
在運(yùn)行時(shí)創(chuàng)建Button對(duì)象的集合在運(yùn)行時(shí)創(chuàng)建Button控件的步驟如下:(1)聲明Button類型的對(duì)象變量。在添加Button對(duì)象時(shí),該變量用來包含對(duì)新產(chǎn)生對(duì)象的引用。該引用可以用來設(shè)置Button對(duì)象的各種屬性。(2)用帶Add方法的Set語句,將對(duì)象變量賦值為新Button對(duì)象。(3)用該對(duì)象變量設(shè)置新Button對(duì)象的屬性。下面的代碼在Form對(duì)象的Load事件用帶參數(shù)的Button集合的Add方法可以更有效地設(shè)置屬性。
PrivateSubForm_Load()
Toolbar1.Buttons.Add“l(fā)eft”,“左對(duì)齊”,
tbrSeparatorEndSub63
按鈕的Style屬性決定按鈕的行為
Button對(duì)象的一個(gè)重要的屬性是Style屬性。Style屬性決定了按鈕的行為特點(diǎn),并且與按鈕相關(guān)聯(lián)的功能可能受到按鈕樣式的影響。表8.4列出了五種按鈕樣式以及它們的用途。6465
將控件放入工具條在設(shè)計(jì)時(shí),可以很方便地在Toolbar控件中放置其它控件,例如combobox、Textbox或OptionButton控件等。在設(shè)計(jì)時(shí)將其它控件放入toolbar控件的步驟如下:(1)創(chuàng)建Button對(duì)象,并賦予適當(dāng)?shù)膶傩?。?)在工具條中為希望顯示的其它控件留出空擋,然后加入Placeholder樣式的按鈕,并將Width屬性設(shè)置為合適的值。(3)在占位符按鈕的位置上繪制其他控件。在Resize事件中重定位其他控件在設(shè)計(jì)狀態(tài),利用toolbar控件的屬性窗口的“按鈕”標(biāo)簽的“可換行的(R)”復(fù)選框,可以設(shè)置控件能否在用戶調(diào)整窗口寬度時(shí),自動(dòng)折行。選中時(shí)能夠自動(dòng)折行,未選中時(shí)不能自動(dòng)折行。在程序代碼中,如果Wrappable屬性設(shè)置為True,則當(dāng)最終用戶改變窗體的大小時(shí)Toolbar控件會(huì)自動(dòng)折行。66盡管Button對(duì)象能夠自動(dòng)折行,但放置在它們上面的其它VB內(nèi)部控件不能。例如,在圖8-20所示的工具條中的驅(qū)動(dòng)器列表框不見了。要使其它控件能夠折行,則首先要?jiǎng)?chuàng)建Placeholder樣式的Button對(duì)象,然后在對(duì)應(yīng)位置繪制其他控件。并在Form對(duì)象的Resize事件中的Move方法重定位該控件。67在ButtonClick事件中用SelectCase語句編寫按鈕的功能在單擊按鈕(占位符和分割符樣式的按鈕除外)時(shí),發(fā)生ButtonClick事件??梢杂冒粹o的Index屬性或Key屬性標(biāo)識(shí)被單擊的按鈕。利用這些屬性中的任意一個(gè),可以用SelectCase語句編寫按鈕的功能代碼。如下面的代碼示例所示:為了利用第2章的“四則運(yùn)算器”和“個(gè)人通訊錄”兩個(gè)示例程序的結(jié)果,首先要把窗體文件“Form1_錄入”和“Form1_計(jì)算器”添加到本工程中,并且保留原來的路徑。因?yàn)橥ㄓ嶄浰玫谋怼翱腿恕彼诘臄?shù)據(jù)庫文件“D:\LISI\tongxunlu.mdb”在D盤LISI文件夾下。在后續(xù)章節(jié)中學(xué)習(xí)了數(shù)據(jù)庫應(yīng)用程序開發(fā)技術(shù)之后將陸續(xù)添加其它工具按鈕的代碼。68
PrivateSubToolbar1_ButtonClick(ByVal
ButtonAsMSComctlLib.Button)SelectCaseButton.IndexCase1'裝入并顯示通訊錄錄入窗口。
LoadForm1_錄入
Form1_錄入.ShowCase10'裝入并顯示計(jì)算器窗口。
LoadForm1_計(jì)算器
Form1_計(jì)算器.ShowCaseElse'處理其他情況。
EndSelectEndSub69用ToolTipText屬性設(shè)置ToolTip文本當(dāng)光標(biāo)在某個(gè)Button對(duì)象上停留(但未按鍵)時(shí),在按鈕處出現(xiàn)稱為“ToolTip”的文本。設(shè)計(jì)時(shí),在toolbar控件“屬性頁”中的“工具提示文本”框中鍵入需要的文本,即可為按鈕加入Tooltip。運(yùn)行時(shí),可以通過設(shè)置Button對(duì)象的ToolTipText屬性動(dòng)態(tài)地改變ToolTip。
使用SaveToolbar和RestoreToolbar方法如果允許用戶重新配置Toolbar控件,那么需要用SaveToolbar和RestoreToolbar方法保存和恢復(fù)該工具條。例如,如果有多個(gè)用戶同時(shí)使用同一應(yīng)用程序(例如,字處理軟件WORD),但他們的使用習(xí)慣不同,那么可以用Savetoolbar方法使用戶能夠創(chuàng)建自己的定制工具條。然后創(chuàng)建一個(gè)登錄過程,用來標(biāo)識(shí)每個(gè)用戶,并通過RestoreToolbar方法,根據(jù)登錄信息恢復(fù)用戶個(gè)人的工具條。70
SaveToolbar方法將toolbar控件的當(dāng)前狀態(tài)保存到系統(tǒng)注冊(cè)表中。該方法需要三個(gè)參數(shù)。第一個(gè)參數(shù)key必須是整數(shù)。第二個(gè)和第三個(gè)參數(shù):subkey和value必須是字符串。要恢復(fù)同一subkey的工具條的不同版本,可將value參數(shù)設(shè)置為不同字符串。下面的代碼用兩個(gè)常數(shù)定義了前兩個(gè)參數(shù)。在Form對(duì)象的Load事件中,該代碼調(diào)用了名為“Login”的過程,返回用戶的密碼。然后使用返回值恢復(fù)先前保存的工具條名為“cmdSaveToolbar”的命令按鈕,用同樣的三個(gè)參數(shù)值保存當(dāng)前狀態(tài)?!暶鱏aveToolbar方法常數(shù)。ConstSaveSubKey=“MyToolbar”‘聲明用來區(qū)分用戶身份的模塊變量。DimMSaveValAsStringPrivateSubForm_Load()‘運(yùn)行可標(biāo)識(shí)用戶的登錄過程。71‘用用戶密碼來確定用戶的工具條。MsaveVal=LogIn()‘用常數(shù)恢復(fù)Toolbar1的狀態(tài)。Toolbar1.RestoretoolbarSaveKey,SaveSubKey,MSaveValEndSub‘用戶注冊(cè)函數(shù)LogIn()的定義。PublicFunctionLogIn()‘向用戶詢問密碼LogIn=Inputbox(“Password”)EndFunctionPrivateSubcmdSaveToolbar_Click()‘用相同的常數(shù)保存工具條。Toolbar1.SaveToolbarSaveKey,SaveSubKey,MSaveValEndSub72
8.4界面上的用戶事件窗體、圖片框與圖象控件都能檢測(cè)鼠標(biāo)指針的位置,并且可以判定其左、右鍵是否已經(jīng)按下,還能影響鼠標(biāo)按鈕與SHIFT、CTRL或ALT鍵的各種組合。利用鍵盤事件可以編程影響多種鍵盤操作,也可以解釋、處理ASCII字符。
VB應(yīng)用程序還能夠同時(shí)支持事件驅(qū)動(dòng)的拖放功能和OLE的拖放功能。可用Drag方法連同某些屬性及事件來啟用諸如拖放控件的操作。OLE拖放使應(yīng)用程序在Windows環(huán)境下進(jìn)行數(shù)據(jù)交換時(shí)功能大增,無需編寫代碼就可將其中大多數(shù)技術(shù)用于應(yīng)用程序。8.4.1界面上的鼠標(biāo)事件鼠標(biāo)事件的觸發(fā)機(jī)制當(dāng)用戶用鼠標(biāo)進(jìn)行界面操作時(shí),根據(jù)用戶的動(dòng)作觸發(fā)相應(yīng)的鼠標(biāo)事件。主要有下面的事件種類和觸發(fā)機(jī)制:(1)移動(dòng)鼠標(biāo),連續(xù)觸發(fā)MouseMove事件。(2)按下鼠標(biāo)鍵,觸發(fā)MouseDown事件。(3)按下鼠標(biāo)鍵移動(dòng)鼠標(biāo)時(shí),觸發(fā)MouseMove事件。73(4)放開鼠標(biāo)鍵時(shí),觸發(fā)MouseUp事件。(5)MouseUp事件之后,觸發(fā)Click事件。在雙擊鼠標(biāo)時(shí),發(fā)生下列事件:(1)MouseDown事件。(2)MouseUp事件。(3)Click事件。(4)DoubleClick事件。(5)MouseUp事件。
74'
Click事件當(dāng)用戶單擊左鼠標(biāo)鍵時(shí),觸發(fā)此事件,事件過程如下:SubObject_Click()‘Object是被單擊的界面元素對(duì)象名稱(下同)。事件過程代碼塊‘處理單擊事件的代碼。EndSubDbClick事件鼠標(biāo)雙擊事件,用戶雙擊左鼠標(biāo)鍵時(shí)觸發(fā)此事件,事件過程如下:SubObject_DbClick()
事件過程代碼塊‘處理雙擊事件的代碼。EndSub75
MouseDown事件當(dāng)用戶在界面上移動(dòng)鼠標(biāo)時(shí),將連續(xù)觸發(fā)MouseMove事件,事件過程如下:SubObject_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
事件過程代碼塊‘處理鼠標(biāo)鍵被按下事件的代碼。EndSubMouseMove事件返回四個(gè)狀態(tài)值分別表示所按的鼠標(biāo)鍵是哪個(gè),是否按下了組合鍵,鼠標(biāo)指針的坐標(biāo)位置。四個(gè)返回值被該過程頭中定義的四個(gè)變量接收。Button變量:該變量用來確定按下的是哪個(gè)鼠標(biāo)鍵,Button變量的取值范圍如表8.5所示。76要確定是哪個(gè)鍵產(chǎn)生的MouseDown事件,可以用SelectCase語句完成這一功能,如:SelectCaseButtonCase1‘鼠標(biāo)左鍵被按下。處理鼠標(biāo)左鍵被按下的程序代碼塊
Case2‘鼠標(biāo)右鍵被按下。處理鼠標(biāo)右鍵被按下的程序代碼塊
Case4‘鼠標(biāo)中鍵被按下。處理鼠標(biāo)中鍵被按下的程序代碼塊EndSelect77
Shift變量:該變量用來確定鍵盤上的Shift鍵、Control鍵、Alt鍵的狀態(tài),即是否被按下。Shift變量的取值范圍如表8.6所示。78可以用If語句確定按下鼠標(biāo)鍵時(shí),鍵盤上的組合鍵Shift鍵、Control鍵、Alt鍵的狀態(tài),例如:IfShift=1Then‘Shift鍵被按下。處理Shift鍵同時(shí)按下時(shí)的鼠標(biāo)事件程序代碼塊ElseIfShift=2Then‘Ctrl鍵被按下。處理Ctrl鍵同時(shí)按下時(shí)的鼠標(biāo)事件程序代碼塊ElseIfShift=4Then‘Alt鍵被按下。處理Alt鍵同時(shí)按下時(shí)的鼠標(biāo)事件程序代碼塊EndIfX和Y變量:用來確定鼠標(biāo)鍵按下時(shí)鼠標(biāo)指針?biāo)幬恢玫淖鴺?biāo)。79
MouseUp事件在釋放鼠標(biāo)鍵時(shí)觸發(fā)此事件,其事件過程的結(jié)構(gòu)與MouseDown事件過程相同。SubObject_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
事件過程代碼塊‘處理鼠標(biāo)鍵被放開事件的代碼。EndSubMouseMove事件當(dāng)鼠標(biāo)經(jīng)過控件時(shí)連續(xù)觸發(fā)此事件。其語法結(jié)構(gòu)是:SubObject_MouseMove()
事件過程代碼塊‘處理鼠標(biāo)經(jīng)過事件的代碼。EndSub808.4.2界面上的鍵盤事件鍵盤事件是用戶敲擊鍵盤時(shí)產(chǎn)生的事件,對(duì)于接受文本的控件,通常要對(duì)鍵盤事件進(jìn)行編程。對(duì)于應(yīng)用程序,編程人員必須編寫既可以用鼠標(biāo)操作也可以用鍵盤操作的應(yīng)用程序。鍵盤事件和鼠標(biāo)事件都是用戶與程序之間交互操作中的主要元素。單擊鼠標(biāo)和按下按鍵都可觸發(fā)事件,而且還提供進(jìn)行數(shù)據(jù)輸入的手段以及在窗口和菜單中移動(dòng)的基本形式。常用的鍵盤事件有KeyDown、KeyUp和KeyPress事件,它們各自的觸發(fā)機(jī)制如表8.7所示。81
返回按鍵ASCII碼的KeyPress事件當(dāng)用戶按下鍵盤上的某個(gè)鍵時(shí),將發(fā)生KeyPress事件,該事件可用于窗體、復(fù)選框、組合框、命令按鈕、列表框等對(duì)象。嚴(yán)格地說,當(dāng)按下鍵盤上的某個(gè)鍵時(shí),所觸發(fā)的是具有輸入焦點(diǎn)(Focus)的控件的KeyPress事件。在某一時(shí)刻,輸入焦點(diǎn)只能位于某一個(gè)控件上,如果窗體上沒有活動(dòng)的或可見的控件時(shí),則輸入焦點(diǎn)位于窗體上。當(dāng)一個(gè)控件或窗體本身擁有輸入焦點(diǎn)時(shí),該控件或窗體將接收從鍵盤上輸入的信息。在按下與ASCII字符對(duì)應(yīng)的鍵時(shí)將觸發(fā)KeyPress事件。ASCII字符集不僅代表標(biāo)準(zhǔn)鍵盤的字母、數(shù)字和標(biāo)點(diǎn)符號(hào),而且也代表大多數(shù)控制鍵。但是KeyPress事件只識(shí)別ENTER、TAB和BACKSPACE鍵。KeyDown和KeyUp事件能夠檢測(cè)其它的功能鍵、編輯鍵和定位鍵。KeyPress事件的語法結(jié)構(gòu)是:82PrivateSubobject_KeyPress([indexAsInteger,]KeyAsciiAsInteger)
響應(yīng)事件的程序代碼塊EndSub其中,KeyAscii參數(shù)是所按鍵的ASCII碼。index參數(shù)用于控制數(shù)組。例如,若要判斷輸入的是否是回車鍵(回車鍵的ASCII碼是13)??梢杂孟铝谐绦蚣右耘袛啵篜rivateSubobject_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13Then‘按下回車鍵。
Msgbox“您按下了回車鍵!??!”
EndIfEndSub83數(shù)字的ASCII碼從48(數(shù)字0)到57(數(shù)字9),而字母的ASCII碼從58(字母a)到110(字母Z)。所以程序還可以用KeyAscii變?cè)獊泶_定輸入的是否是字母和數(shù)字:PrivateSubobject_KeyPress(KeyAsciiAsInteger)IfNotKeyAscii>=48orKeyAscii<=110Then‘輸入的不是字母或數(shù)字。
Msgbox“請(qǐng)輸入字母或數(shù)字?。。 ?/p>
EndIfEndSub如果將窗體的KeyPreview屬性設(shè)置為True,則對(duì)每個(gè)控件在識(shí)別其所有鍵盤事件之前,窗體就會(huì)接受這些鍵盤事件。這樣,設(shè)置KeyPreview屬性極為有用。84KeyDown事件的語法是:PrivateSubobject_KeyDown([indexAsInteger,]KeycodeAsInteger,shiftAsInteger)
響應(yīng)事件的程序代碼塊EndSubKeyUp事件的語法是:PrivateSubobject_KeyUp([indexAsInteger,]KeycodeAsInteger,shiftAsInteger)
響應(yīng)事件的程序代碼塊EndSub858.4.3鼠標(biāo)光標(biāo)的形狀在VB中,可以通過屬性來設(shè)置鼠標(biāo)光標(biāo)的形狀。其語法格式如下所示:MousePointer=屬性值鼠標(biāo)光標(biāo)的形狀通過MousePointer屬性來設(shè)置。該屬性既可以在屬性窗口中設(shè)置,也可以在程序代碼中設(shè)置。MousePointer屬性值是一個(gè)整數(shù),其取值及各個(gè)值的含義見表8.9。86878.4.4拖放操作鼠標(biāo)拖放操作是用戶按下鼠標(biāo)按鈕,將一個(gè)對(duì)象從一個(gè)地方拖到另一個(gè)地方,然后放開鼠標(biāo)按鈕,將對(duì)象重新定位或發(fā)布一條命令(復(fù)制、移動(dòng)等)。拖放操作可以作為菜單或命令按鈕操作的補(bǔ)充。對(duì)拖放操作的支持可以使用戶界面更為直觀和易用。例如,Word文檔編輯時(shí),經(jīng)常把一段文本選中(涂黑)后拖到另一個(gè)地方。WINDOWS操作系統(tǒng)的文件或文件夾復(fù)制也經(jīng)常使用拖放操作。VB的拖放功能使用戶在程序運(yùn)行時(shí)也能具有這種能力。稱按下鼠標(biāo)按鈕并移動(dòng)對(duì)象的操作為拖動(dòng),稱釋放按鈕的操作為放下。即拖放是用鼠標(biāo)從屏幕上把一個(gè)對(duì)象(控件)“拖拉”(Dragging)到另一個(gè)地方再放下(Dropping)。88拖放的一般過程是:把鼠標(biāo)光標(biāo)移到一個(gè)控件對(duì)象上,按下鼠標(biāo)按鈕,不要松開,然后移動(dòng)鼠標(biāo),對(duì)象將隨鼠標(biāo)的移動(dòng)而在屏幕上拖動(dòng),松開鼠標(biāo)按鈕后,對(duì)象即被放下。通常把原來位置的對(duì)象叫做源對(duì)象,而拖動(dòng)后放下的位置的對(duì)象叫做目標(biāo)對(duì)象。在拖動(dòng)過程中,被拖動(dòng)的對(duì)象變?yōu)榛疑珵榱酥С滞戏挪僮?,只要遵循以下三個(gè)步驟:(1)設(shè)置DragMode屬性為1,使得對(duì)象可以自動(dòng)被拖放。(2)設(shè)置DragIcon,決定對(duì)象被拖動(dòng)時(shí)鼠標(biāo)指針的形狀,可以是任何位圖或圖標(biāo)。(3)為目標(biāo)對(duì)象編寫DragDrop或DragOver事件過程。VB為被拖對(duì)象最終被拖至或放置的目標(biāo)對(duì)象執(zhí)行這個(gè)事件過程,該過程完成一些適當(dāng)?shù)墓ぷ?,?zhí)行幾條命令,或者以某種方式改變目標(biāo)對(duì)象。8與拖放有關(guān)的屬性、事件和方法表8.10列出了用于拖放操作的屬性、事件和方法,利用這些屬性、事件和方法能夠指定拖動(dòng)操作的意義,而且能夠指定對(duì)于給定對(duì)象啟動(dòng)拖動(dòng)操作的方法。90
DragMode屬性該屬性用來設(shè)置自動(dòng)或手動(dòng)拖放模式。在缺省情況下,該屬性值為0(手動(dòng)方式)。為了能夠?qū)σ粋€(gè)控件執(zhí)行自動(dòng)拖放操作,必須把它的DragMode屬性設(shè)置為1,該屬性可以在屬性窗口中設(shè)置(1—Automatic),也可以在程序代碼中設(shè)置,例如:Command1.DragMode=1注意:DragM
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- IP網(wǎng)絡(luò)基礎(chǔ)知識(shí)
- 氣切患者心理支持與溝通
- 沖壓?jiǎn)T工考試題及答案
- 財(cái)務(wù)崗前培訓(xùn)考試試題及答案
- 2025-2026人教版八年級(jí)物理上冊(cè)測(cè)試
- 2026年重點(diǎn)高中自主招生考試語文試卷試題(含答案+答題卡)
- 2025-2026二年級(jí)科學(xué)學(xué)期末測(cè)試
- 2025-2026一年級(jí)體育期末考卷
- 衛(wèi)生室倉庫盤存制度
- 學(xué)校衛(wèi)生室廠家管理制度
- 2025新譯林版英語七年級(jí)下單詞默寫單
- 新高考語文專題訓(xùn)練之模擬題分類匯編文言文閱讀1(原卷版+解析)
- DL∕T 5545-2018 火力發(fā)電廠間接空冷系統(tǒng)設(shè)計(jì)規(guī)范
- 《研學(xué)旅行課程設(shè)計(jì)》課件-研學(xué)課程設(shè)計(jì)原則
- JJG 693-2011可燃?xì)怏w檢測(cè)報(bào)警器
- (本科)大學(xué)生勞動(dòng)教育理論與實(shí)踐教程全書電子教案完整版
- 黑龍江省中藥飲片炮制規(guī)范及標(biāo)準(zhǔn)
- 盤口暗語及盤口數(shù)字語言
- QC-提高衛(wèi)生間防水一次驗(yàn)收合格率
- 彈藥庫防火防爆消防演示
- 大地測(cè)量控制點(diǎn)坐標(biāo)轉(zhuǎn)換技術(shù)規(guī)程
評(píng)論
0/150
提交評(píng)論