




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第10章鍵盤(pán)與鼠標(biāo)
鍵盤(pán)事件10.1與鼠標(biāo)相關(guān)的事件和屬性10.2拖放10.310.1鍵盤(pán)事件10.1.1KeyPress事件10.1.2KeyDown和KeyUp事件鍵盤(pán)是一種輸入數(shù)據(jù)或者信息的重要工具,有些控件(如窗體和文本框)本身已經(jīng)具備了處理輸入按鍵的功能,所以在簡(jiǎn)單編程的情況下可以不必編寫(xiě)鍵盤(pán)事件過(guò)程。但是,如果要識(shí)別組合鍵、功能鍵、光標(biāo)移動(dòng)鍵、小鍵盤(pán)(數(shù)字鍵盤(pán))上的按鍵、區(qū)別按下和松開(kāi)的動(dòng)作、對(duì)輸入字符進(jìn)行篩選,就要使用鍵盤(pán)事件了,本章介紹的鍵盤(pán)事件有KeyPress事件、KeyDown事件和KeyUp事件。10.1.1KeyPress事件KeyPress事件,就是當(dāng)按下鍵盤(pán)上的一個(gè)可打印字符鍵(字母、數(shù)字和符號(hào))時(shí)所激發(fā)的事件。我們知道,在某個(gè)時(shí)刻,輸入焦點(diǎn)只能位于某一個(gè)控件上(如果窗體上沒(méi)有活動(dòng)的或可見(jiàn)的控件,則輸入焦點(diǎn)位于窗體控件上),當(dāng)一個(gè)控件擁有輸入焦點(diǎn)時(shí),該控件才能接受從鍵盤(pán)上輸入的信息,所以當(dāng)按下某個(gè)鍵時(shí),所激發(fā)的是擁有輸入焦點(diǎn)的那個(gè)控件的KeyPress事件。支持KeyPress事件的控件有窗體、命令按鈕、文本框、復(fù)選框、單選框、列表框、組合框、滾動(dòng)條與圖片框等。該事件過(guò)程的語(yǔ)法是:PrivateSubobject_KeyPress(KeyAsciiAsInteger)EndSub其中object是指支持KeyPress事件的控件名,比如文本框控件的KeyPress事件的語(yǔ)法就是:PrivateSubText1_KeyPress(KeyAsciiAsInteger)EndSub整形參數(shù)KeyAscii傳遞的是按鍵字符的ASCII碼。例如,當(dāng)按下【F】鍵時(shí),KeyAscii的值為70;按下【!】鍵時(shí),KeyAscii的值為33等。我們可以使用Chr(KeyAscii)函數(shù)將KeyAscii參數(shù)轉(zhuǎn)變?yōu)橐粋€(gè)字符,例如Chr(70)=【F】。KeyPress事件只能夠處理可打印的鍵盤(pán)字符和為數(shù)很少的幾個(gè)功能鍵,如Enter(回車(chē)鍵)和BackSpace(退格鍵),對(duì)于其他功能鍵、編輯鍵和定位鍵,則不作響應(yīng)。如果要處理不被KeyPress識(shí)別的擊鍵,則應(yīng)該使用KeyDown和KeyUp事件。KeyPress事件在截取對(duì)TextBox或ComboBox控件輸入的擊鍵時(shí)非常有用,它可以立即測(cè)試擊鍵的有效性并在字符輸入時(shí)對(duì)其進(jìn)行處理。我們?nèi)绻贙eyPress事件過(guò)程中改變了KeyAscii參數(shù)的值,就會(huì)改變實(shí)際輸入的字符,將KeyAscii的值改變?yōu)?時(shí)可取消擊鍵,這樣對(duì)象便接收不到字符了。因?yàn)椴煌淖址腁SCII碼是不同的,所以利用KeyPress事件可以判斷和控制用戶的輸入,例如可以控制用戶在文本框中只能輸入數(shù)字或字母,還可以判斷用戶輸入的字母是大寫(xiě)還是小寫(xiě)。我們把一個(gè)文本框控件(Text1)拖到窗體上,然后進(jìn)入程序代碼窗口,在“過(guò)程”框中選擇KeyPress,編寫(xiě)如下代碼:PrivateSubText1_KeyPress(KeyAsciiAsInteger)Text1.Text=""IfKeyAscii<48OrKeyAscii>57ThenBeepKeyAscii=0ElseKeyAscii=KeyAscii+1EndIfEndSub上述過(guò)程首先控制用戶的輸入,它只允許用戶輸入0~9的數(shù)字(0的ASCII碼是48,9的ASCII碼是57),如果輸入其他字符,則響鈴(Beep),并消除該字符;然后,再把用戶輸入的數(shù)字加1。運(yùn)行上面的程序,在文本框中輸入一個(gè)1,則會(huì)顯示2;輸入9的時(shí)候,則會(huì)顯示一個(gè)英文冒號(hào),因?yàn)橛⑽拿疤?hào)的ASCII碼是58。上面我們說(shuō)過(guò),只有在窗體上沒(méi)有活動(dòng)或可見(jiàn)控件時(shí),窗體才能接收鍵盤(pán)事件。如果我們希望優(yōu)先激活窗體的鍵盤(pán)事件,則可以把窗體的KeyPreview屬性設(shè)置為T(mén)rue。這個(gè)屬性不只對(duì)KeyPress事件有用,對(duì)KeyDown和KeyUp事件同樣有用。例10-1(參看教材P164-166)10.1.2KeyDown和KeyUp事件KeyDown事件是當(dāng)按下按鍵時(shí)觸發(fā),而KeyUp事件是當(dāng)釋放按鍵時(shí)觸發(fā),這兩個(gè)事件提供了最低級(jí)的鍵盤(pán)響應(yīng),可以報(bào)告鍵盤(pán)的物理狀態(tài),它們返回的是“鍵”。這和KeyPress事件不同,KeyPress事件并不反映鍵盤(pán)的直接狀態(tài),它返回的是“字符”的ASCII碼。我們進(jìn)一步舉例闡明這一差別。按下字母鍵“A”時(shí),KeyDown所得到的KeyCode碼(KeyDown事件的參數(shù))與按字母鍵“a”時(shí)相同,而對(duì)KeyPress來(lái)說(shuō),所的到的ASCII碼是不相同的。這兩個(gè)事件過(guò)程的語(yǔ)法為:PrivateSubobject_KeyDown(KeyCodeAsInteger,ShiftAsInteger)PrivateSubobject_KeyUp(KeyCodeAsInteger,ShiftAsInteger)其中的object是對(duì)象名,例如窗體的KeyDow事件的語(yǔ)法為:PrivateSubForm_KeyDown(KeyCodeAsInteger,ShiftAsInteger)KeyDown和KeyUp事件都是有兩個(gè)參數(shù),即KeyCode和Shift,下面對(duì)兩個(gè)參數(shù)的具體含義進(jìn)行解釋。1.KeyCode參數(shù)KeyCode是一個(gè)整形參數(shù),表示按鍵的代碼。每一個(gè)鍵都有相應(yīng)的鍵代碼,該碼是以“鍵”為準(zhǔn),而不是以“字符”為準(zhǔn),字母鍵的鍵代碼與此字母的大寫(xiě)字符ASCII值相同。如上面介紹,大寫(xiě)字母與小寫(xiě)字母使用同一個(gè)鍵,它們的KeyCode相同,具體是大寫(xiě)字母還是小寫(xiě)字母要通過(guò)與Shift參數(shù)的組合來(lái)判斷。而大鍵盤(pán)上數(shù)字鍵和數(shù)字鍵盤(pán)上的相同的數(shù)字鍵的KeyCode是不一樣的,因?yàn)樗鼈儾皇峭粋€(gè)“鍵”。VisualBasic為每個(gè)鍵代碼聲明了一個(gè)內(nèi)部常量。例如F1鍵的鍵代碼為112,相應(yīng)的內(nèi)部常量為vbKeyF1;Home鍵的鍵代碼為36,內(nèi)部常量為vbKeyHome。如表10-1所示,列出了一些常用按鍵的KeyCode值和內(nèi)部常量的對(duì)應(yīng)關(guān)系。表10-1一些常用鍵的KeyCode值和內(nèi)部常數(shù)功能鍵KeyCode值常數(shù)功能鍵KeyCode值常數(shù)F1112vbKeyF1Enter13vbKeyReturnF2113VbKeyF2Esc27vbKeyEscapeF3114VbKeyF3PageUp33VbKeyPageUpF4115VbKeyF4PageDown34VbKeyPageDownF5116VbKeyF5Home35VbKeyHomeF6117VbKeyF6End36VbKeyEndF7118VbKeyF7Insert45VbKeyInsertF8119VbKeyF8Delete46VbKeyDeleteF9120VbKeyF9←37VbKeyLeftF10121vbKeyF10↑38VbKeyUpBackspace8vbKeyBack→39VbKeyRightTab9vbKeyTab↓40vbKeyDown2.Shift參數(shù)Shift也是一個(gè)整形參數(shù),指示在按下一個(gè)鍵時(shí),是否同時(shí)按下了Shift、Ctrl和Alt鍵。它以二進(jìn)制形式表示,當(dāng)按下Shift鍵時(shí),Shift參數(shù)的值為001(十進(jìn)制數(shù)1);當(dāng)按下Ctrl鍵時(shí),Shift參數(shù)的值為010(十進(jìn)制數(shù)2);當(dāng)按下Alt鍵時(shí),Shift參數(shù)的值為100(十進(jìn)制數(shù)4)。如果三個(gè)鍵均未被按下,Shift參數(shù)的值為0,如果這三個(gè)鍵不只一個(gè)鍵被按下,則Shift參數(shù)的值是被按下鍵相應(yīng)數(shù)值之和。例如,如果Shift參數(shù)的值為6,表明按下了Ctrl和Alt兩個(gè)鍵。因此,Shift參數(shù)的值共有8種可能,見(jiàn)表10-2。表10-2Shift參數(shù)的值十進(jìn)制數(shù)二進(jìn)制數(shù)作用0000沒(méi)有按下轉(zhuǎn)換鍵1001按下Shift鍵2010按下Ctrl鍵3011按下Ctrl+Shift鍵4100按下Alt鍵5101按下Alt+Shift鍵6110按下Alt+Ctrl鍵7111按下Alt+Ctrl+Shift鍵上面我們已經(jīng)說(shuō)過(guò),KeyDown是當(dāng)一個(gè)鍵被按下時(shí)所產(chǎn)生的事件,而KeyUp是當(dāng)松開(kāi)被按下的鍵時(shí)所產(chǎn)生的事件,我們可以通過(guò)一個(gè)具體的程序來(lái)說(shuō)明。新建一個(gè)工程,窗體上不放任何控件,也可以把窗體的KeyPreview屬性設(shè)為T(mén)rue,然后編寫(xiě)如下事件:PrivateSubForm_KeyDown(KeyCodeAsInteger,ShiftAsInteger)Form1.ForeColor=&O0Print"您現(xiàn)在按下了鍵盤(pán)上的某個(gè)鍵"EndSubPrivateSubForm_KeyUp(KeyCodeAsInteger,ShiftAsInteger)Form1.ForeColor=&HFFPrint"您現(xiàn)在松開(kāi)了您按下的鍵"EndSub程序運(yùn)行后,如果壓下某個(gè)鍵,則在窗體上連續(xù)顯示“您現(xiàn)在按下了鍵盤(pán)上的某個(gè)鍵”,顏色為黑色,直到松開(kāi)了該鍵,窗體上顯示“您現(xiàn)在松開(kāi)了您按下的鍵”,顏色為紅色。例10-2(參看教材P168-169)10.2與鼠標(biāo)相關(guān)的事件和屬性10.2.1MouseDown、MouseUp和MouseMove事件10.2.2使用鼠標(biāo)事件10.2.3MousePointer和MouseIcon屬性我們前面已經(jīng)多次使用過(guò)窗體和其他控件的Click事件和DblClick事件,這兩個(gè)是很簡(jiǎn)單的鼠標(biāo)事件,它們沒(méi)有參數(shù),當(dāng)程序在處理這兩個(gè)事件時(shí),不能確定用戶是在對(duì)象的什么位置上單擊鼠標(biāo),也不能確定用戶單擊的是鼠標(biāo)的哪一個(gè)鍵,更不能確定在單擊鼠標(biāo)時(shí)是否按下了鍵盤(pán)上的某個(gè)控制鍵(如Shift、Ctrl和Alt鍵)。如果要在程序中得知上面所述各種狀態(tài),就要處理下面的MouseDown、MouseUp和MouseMove事件。大家使用Windows及其應(yīng)用程序時(shí),可能會(huì)注意到,當(dāng)鼠標(biāo)光標(biāo)位于不同的窗口內(nèi)時(shí),其形狀是不一樣的,有時(shí)候是箭頭狀,有時(shí)候是十字,有時(shí)候是豎線等。在VisualBasic中,我們可以通過(guò)設(shè)置相關(guān)的屬性來(lái)改變鼠標(biāo)的形狀。10.2.1MouseDown、MouseUp和MouseMove事件具M(jìn)ouseDown、MouseUp和MouseMove事件的對(duì)象有窗體、命令按鈕、文本框、復(fù)選框、單選框、框架、圖像、標(biāo)簽、列表框和圖片框等。當(dāng)用戶在對(duì)象上按下鼠標(biāo)鍵時(shí)觸發(fā)MouseDown事件,事件過(guò)程的語(yǔ)法為:PrivateSubobject_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)當(dāng)用戶在對(duì)象上釋放鼠標(biāo)鍵時(shí)觸發(fā)MouseUp事件,事件過(guò)程的語(yǔ)法為:PrivateSubobject_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)當(dāng)用戶在對(duì)象上移動(dòng)鼠標(biāo)時(shí)觸發(fā)MouseMove事件,事件過(guò)程的語(yǔ)法為:PrivateSubobject_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)語(yǔ)法中的object是只對(duì)象名,如“Form”、“Command”等。這三個(gè)事件過(guò)程與前面學(xué)過(guò)的其他事件過(guò)程最大的不同在于,它們都具有四個(gè)參數(shù)。通過(guò)這四個(gè)參數(shù)可以在程序中確定事件發(fā)生時(shí)詳細(xì)的信息。這四個(gè)參數(shù)的取值與意義如下。1.Button參數(shù)Button參數(shù)值是一個(gè)整形值,參數(shù)的值反映事件發(fā)生時(shí)哪個(gè)鼠標(biāo)鍵被按下或釋放。用0,1,2位表示鼠標(biāo)的左、右、中鍵,每位用1,0表示被按下或釋放,如圖10-4所示。三個(gè)位的二進(jìn)制轉(zhuǎn)換成十進(jìn)制就是Button的值,1表示左鍵,2表示右鍵,4表示中鍵。
圖10-4Button參數(shù)與位的關(guān)系對(duì)于MouseMove事件,事件發(fā)生時(shí),可能同時(shí)有兩個(gè)或三個(gè)鼠標(biāo)鍵被按下,這時(shí)Button參數(shù)是相應(yīng)的兩個(gè)或三個(gè)值的和。例如,如果MouseMove事件發(fā)生時(shí),Button參數(shù)的值是3,則表示鼠標(biāo)左鍵和右鍵都被按下(1+2=3)。因?yàn)橐苿?dòng)鼠標(biāo)時(shí),可以不按下任何一個(gè)鼠標(biāo)鍵,所以對(duì)于MouseMove事件,這個(gè)參數(shù)的值可以為0。2.Shift參數(shù)此參數(shù)也是一個(gè)整數(shù),它表明在這三個(gè)鼠標(biāo)事件發(fā)生時(shí),鍵盤(pán)上的哪一個(gè)控制鍵被按下。Shift參數(shù)的值為1,表示Shift鍵被按下;Shift參數(shù)的值為2,表示Ctrl鍵被按下;Shift參數(shù)的值為4,表示Alt鍵被按下。如果同時(shí)有兩個(gè)或三個(gè)控制鍵被按下,則Shift參數(shù)的值是相應(yīng)鍵的數(shù)值之和。例如,當(dāng)事件發(fā)生時(shí),如果Shift鍵和Alt鍵同時(shí)處于按下?tīng)顟B(tài),則Shift參數(shù)值為5;如果事件發(fā)生時(shí),沒(méi)有鍵盤(pán)控制鍵被按下,則這個(gè)參數(shù)的值為0。3.X參數(shù)、Y參數(shù)這兩個(gè)參數(shù)指明當(dāng)事件發(fā)生時(shí),鼠標(biāo)指針熱點(diǎn)所處位置的坐標(biāo),它們確定了鼠標(biāo)位置。這里的X、Y不需要給出具體的數(shù)值,它隨著鼠標(biāo)光標(biāo)在窗體上的移動(dòng)而變化。默認(rèn)情況下,這個(gè)坐標(biāo)的原點(diǎn)在引發(fā)事件對(duì)象的左上角。應(yīng)該注意的是,當(dāng)移動(dòng)鼠標(biāo)時(shí),會(huì)不斷地發(fā)生MouseMove事件。但是,并不是每經(jīng)過(guò)一點(diǎn)都會(huì)發(fā)生MouseMove事件,而是在移動(dòng)過(guò)程中每間隔很短的一段時(shí)間發(fā)生一個(gè)此事件。所以,在相同的距離上,鼠標(biāo)移動(dòng)的速度越快,產(chǎn)生的MouseMove事件就越少。在對(duì)象上操作一次鼠標(biāo),會(huì)產(chǎn)生多個(gè)與鼠標(biāo)有關(guān)的事件,如:Click事件、DblClick事件、MouseDown事件、MouseUp事件或MouseMove事件。對(duì)于不同類(lèi)型的對(duì)象,這些事件的產(chǎn)生順序可能不同,還有些對(duì)象不支持其中的某個(gè)事件。所以,在使用前一定要仔細(xì)測(cè)試。比如,在窗體上單擊,會(huì)依次引發(fā)MouseDown事件、MouseUp事件和Click事件。在窗體上雙擊,會(huì)依次引發(fā)如下事件:MouseDown、Click、DblClick、MouseUp。在命令按鈕單擊,會(huì)依次引發(fā)MouseDown、Click、MouseUp事件。當(dāng)一個(gè)控件不可見(jiàn)或無(wú)效時(shí),針對(duì)它的鼠標(biāo)操作會(huì)傳遞到位于它下面的對(duì)象上。10.2.2使用鼠標(biāo)事件使用MouseMove事件,可以把命令按鈕移動(dòng)到窗體的不同位置,這樣可以設(shè)計(jì)一個(gè)程序,在用戶點(diǎn)擊窗體上的命令按鈕時(shí),命令按鈕就移動(dòng),使用戶點(diǎn)不住這個(gè)按鈕。下面我們?cè)O(shè)計(jì)一個(gè)這樣有趣的程序。例10-3(參看教材P172-173)例10-4(參看教材P173-174)例10-5(參看教材P175-176)例10-6(參看教材P176-177)10.2.3MousePointer和MouseIcon屬性前面我們已經(jīng)說(shuō)過(guò),在Windows環(huán)境中,在不同的窗口,不同的地方,鼠標(biāo)指針的形狀可能是不一樣的,可以用不同的鼠標(biāo)指針來(lái)反映信息。在VisualBasic中,我們可以通過(guò)設(shè)置MousePointer和MouseIcon屬性來(lái)改變鼠標(biāo)指針的形狀。MousePointer屬性指定在運(yùn)行時(shí)當(dāng)鼠標(biāo)移動(dòng)到對(duì)象上時(shí)鼠標(biāo)指針的形狀,窗體和多數(shù)控件對(duì)象都具有這兩個(gè)屬性,該屬性既可以在屬性窗口中設(shè)置,也可以在程序代碼中設(shè)置。MousePointer屬性是一個(gè)整數(shù),可以取0—15,其含義見(jiàn)表10-4。表10-4MousePointer屬性的取值常量值鼠標(biāo)指針的形狀vbDefault0(默認(rèn)值)形狀由對(duì)象決定vbArrow1箭頭vbCrosshair2十字線(Crosshair指針)vbIbeam3I型vbIconPointer4箭頭圖標(biāo)(嵌套方框)vbSizePointer5尺寸線(指向上、下、左和右4個(gè)方向的箭頭)vbSizeNESW6右上-左下尺寸線(指向右上和左下方向的雙箭頭)vbSizeNS7垂直尺寸線(指向上下兩個(gè)方向的雙箭頭)vbSizeNWSE8左上-右下尺寸線(指向左上和右下方向的雙箭頭)vbSizeWE9水平尺寸線(指向左右兩個(gè)方向的雙箭頭)vbUpArrow10向上的箭頭vbHourglass11沙漏(表示等待狀態(tài))vbNoDrop12沒(méi)有入口:一個(gè)圓形記號(hào),表示控件移動(dòng)受限vbArrowHourglass13箭頭和沙漏vbArrowQuestion14箭頭和問(wèn)號(hào)vbSizeAll15四向尺寸線(表示改變大?。﹙bCustom99通過(guò)MouseIcon屬性所指定的自定義圖標(biāo)當(dāng)某個(gè)對(duì)象的MousePointer屬性被設(shè)置為上表中的某個(gè)值時(shí),鼠標(biāo)光標(biāo)在該對(duì)象內(nèi)就以相應(yīng)的形狀顯示。例如,假定一個(gè)文本框的MousePointer屬性被設(shè)置為3,則當(dāng)鼠標(biāo)光標(biāo)進(jìn)入該文本框時(shí),鼠標(biāo)光標(biāo)為“Ⅰ”形,而在文本框之外,鼠標(biāo)光標(biāo)保持為默認(rèn)形狀。MouseIcon屬性使用一個(gè)圖標(biāo)文件來(lái)自定義鼠標(biāo)形狀,圖標(biāo)文件一般以.ico和.cur為擴(kuò)展名。只有當(dāng)MousePointer屬性被設(shè)置為99時(shí),該屬性才有效。在程序中應(yīng)該使用LoadPicture函數(shù)裝入磁盤(pán)文件來(lái)設(shè)置此屬性,如下面一段代碼:Form1.MousePointer=99Form1.MouseIcon=LoadPicture(App.Path+"\ccc.ico")在Windows中,鼠標(biāo)指針的形狀的應(yīng)用有一些約定俗成的規(guī)則,為了和Windows環(huán)境相適應(yīng),在應(yīng)用程序中應(yīng)遵守這些規(guī)則,主要有以下幾點(diǎn):(1)表示用戶當(dāng)前可用的功能,如“I”形鼠標(biāo)指針形狀(屬性值3)表示插入文本;十字形狀(屬性值2)表示畫(huà)圓或線,或者表示選擇可視對(duì)象進(jìn)行復(fù)制或存取。(2)表示程序狀態(tài)的用戶可視線索,如沙漏(屬性值11)表示程序忙,一段時(shí)間后將控制權(quán)交給用戶。(3)當(dāng)坐標(biāo)(X,Y)值為0時(shí),改變鼠標(biāo)指針的形狀。
上面我們說(shuō)過(guò),MousePointer屬性既可以在屬性窗口中設(shè)置,也可以在程序代碼中設(shè)置。在程序代碼中設(shè)置MousePointer屬性的一般格式為:對(duì)象.MousePointer=設(shè)置值這里的“對(duì)象”可以是窗體、屏幕、框架、組合框、復(fù)選框、命令按鈕、文本框、標(biāo)簽、圖像、圖片框、滾動(dòng)條、列表框、目錄列表框、驅(qū)動(dòng)器列表框、文件列表框等,“設(shè)置值”是表10-4中的一個(gè)值。例10-7(參看教材P179)10.3拖放在Windows環(huán)境中,我們經(jīng)常使用拖放操作。所謂拖放,就是在屏幕上用鼠標(biāo)把一個(gè)對(duì)象從一個(gè)地方“拖拉”到另一個(gè)地方再放下。拖放的一般過(guò)程是,把鼠標(biāo)光標(biāo)移動(dòng)到一個(gè)控件對(duì)象上,按下鼠標(biāo)左鍵,不要松開(kāi),然后移動(dòng)鼠標(biāo),對(duì)象將隨鼠標(biāo)的移動(dòng)而在屏幕上拖動(dòng),在松開(kāi)鼠標(biāo)鍵后,對(duì)象即被放下。通常把原來(lái)位置的對(duì)象叫做源對(duì)象,而拖動(dòng)后放下的位置的對(duì)象叫做目標(biāo)對(duì)象。為了有助于理解這種拖放,可以把拖放過(guò)程分解成兩個(gè)操作:拖動(dòng)和放下,“拖動(dòng)”是發(fā)生在源對(duì)象上的“拖”操作,“放下”是發(fā)生在目標(biāo)對(duì)象上的“放”操作,即把源對(duì)象“放”在目標(biāo)對(duì)象上。VisualBasic中,設(shè)計(jì)模式下,各控件都可以用鼠標(biāo)隨意拖放的方式來(lái)改變控件的大小和位置,VB的拖放功能使用戶在程序運(yùn)行時(shí)也具有這種功能。在拖動(dòng)過(guò)程中,被拖動(dòng)的對(duì)象變?yōu)榛疑?.與拖放有關(guān)的屬性、事件和方法除了菜單、記時(shí)器和通用對(duì)話框外,其他控件均可在程序運(yùn)行期間被拖放。表10-5列出了與拖放有關(guān)的屬性、事件和方法,使用這些屬性、事件和方法能夠指定拖放操作的意義,而且能指定對(duì)于給定控件啟動(dòng)拖動(dòng)操作的方法。表10-5與拖放有關(guān)的屬性、事件和方法類(lèi)別項(xiàng)目說(shuō)明屬性DragMode啟動(dòng)自動(dòng)拖動(dòng)控件或手動(dòng)拖動(dòng)控件DragIcon指定拖動(dòng)控件時(shí)顯示的圖標(biāo)事件DragDrop識(shí)別何時(shí)將控件拖動(dòng)到對(duì)象上DragOver識(shí)別何時(shí)在對(duì)象上拖動(dòng)控件方法Drag啟動(dòng)或停止手動(dòng)拖動(dòng)拖放分為自動(dòng)拖放和手動(dòng)拖放,DragMode屬性用來(lái)設(shè)置自動(dòng)或手動(dòng)拖放模式。在默認(rèn)情況下,該屬性值為0,這時(shí)可以用手工方式來(lái)確定拖放操作何時(shí)開(kāi)始或結(jié)束。為了能對(duì)一個(gè)控件執(zhí)行自動(dòng)拖放操作,必須把它的DragMode屬性設(shè)置為1,這時(shí)控件不能正常響應(yīng)鼠標(biāo)事件,如Click事件和MouseDown事件。該屬性可以在屬性窗口中設(shè)置,也可以在程序代碼中設(shè)置,例如:Text1.DragMode=1在拖動(dòng)一個(gè)對(duì)象的過(guò)程中,并不是對(duì)象本身在移動(dòng),而是移動(dòng)代表對(duì)象的圖標(biāo)。也就是說(shuō),一旦要拖動(dòng)一個(gè)控件,這個(gè)控件就變成一個(gè)圖標(biāo),等放下后再恢復(fù)成原來(lái)的控件,默認(rèn)為將源對(duì)象的灰色輪廓作為拖動(dòng)的圖標(biāo)。如果想用某個(gè)圖標(biāo)(擴(kuò)展名為.ico)來(lái)代替該輪廓,則可以通過(guò)DragIcon屬性進(jìn)行設(shè)置。該屬性可以在屬性窗口進(jìn)行設(shè)置,也可以在程序中用LoadPicture函數(shù)進(jìn)行設(shè)置。例如:Command1.DragIcon=LoadPicture(App.Path+"\aa.ico")這里,用“aa.ico”作為命令按鈕的DragIcon屬性,當(dāng)拖動(dòng)該按鈕時(shí),按鈕變成aa.ico所表示的圖標(biāo)。當(dāng)把控件(圖標(biāo))拖到目標(biāo)之后,如果松開(kāi)鼠標(biāo)鍵,則產(chǎn)生一個(gè)DragDrop事件。該事件的過(guò)程語(yǔ)法為:PrivateSubobject_DragDrop(SourceAsControl,XAsSingle,YAsSingle)EndSub其中的“object”是指對(duì)象名,如Form、Command1等。該事件過(guò)程有3個(gè)參數(shù),分別為:Source、X和Y。其中Source是一個(gè)對(duì)象變量,其類(lèi)型為Control,該參數(shù)含有被拖動(dòng)對(duì)象的屬性??梢韵袷褂每丶粯邮褂盟?,可以引用其屬性或調(diào)用其方法。例如:IfSource.Name="form1"Then……用來(lái)判斷被拖動(dòng)對(duì)象的Name屬性是否為“form1”。參數(shù)X、Y是松開(kāi)鼠標(biāo)鍵放下對(duì)象時(shí)鼠標(biāo)光標(biāo)的位置。需要注意的是,如果沒(méi)有進(jìn)行編程設(shè)計(jì),對(duì)象本身不會(huì)移動(dòng)到新的位置或被加到目標(biāo)對(duì)象中,用戶一定要在目標(biāo)對(duì)象的DragDrop事件中進(jìn)行程序設(shè)計(jì)實(shí)現(xiàn)真正的拖動(dòng)。在源對(duì)象被拖動(dòng)到目標(biāo)對(duì)象的過(guò)程中,如果經(jīng)過(guò)其他對(duì)象,則在這些對(duì)象上會(huì)產(chǎn)生DragOver事件,當(dāng)然在目標(biāo)對(duì)象上也會(huì)產(chǎn)生DragOver事件,這個(gè)事件發(fā)生在DragDrop事件之前。DragOver事件過(guò)程語(yǔ)法為:PrivateSubobject_DragOver(SourceAsControl,XAsSingle,YAsSingle,StateAsInteger)EndSub該過(guò)程有4個(gè)參數(shù),其中Source參數(shù)的含義和DragDrop事件的Source參數(shù)義相同,X、Y是拖動(dòng)時(shí)鼠標(biāo)光標(biāo)的坐標(biāo)位置。State參數(shù)是一個(gè)整數(shù)值,可以取以下3個(gè)值:0—鼠標(biāo)光標(biāo)正進(jìn)入目標(biāo)對(duì)象的區(qū)域;1—鼠標(biāo)光標(biāo)正退出目標(biāo)對(duì)象的區(qū)域;2—鼠標(biāo)光標(biāo)正位于目標(biāo)對(duì)象的區(qū)域之內(nèi)。與拖放有關(guān)的方法不僅有Drag方法,還有Move方法,其中Move方法我們比較熟悉,下面主要介紹一下Drag方法。Drag方法的格式為:對(duì)象.Drag整數(shù)不管對(duì)象的DragMode屬性如何設(shè)置,都可以用Drag方法來(lái)人工地啟動(dòng)或停止一個(gè)拖動(dòng)過(guò)程。“整數(shù)”的取值為0、1或2,其含義分別為:
0—取消指定控件的拖放;
1—當(dāng)Drag方法出現(xiàn)在控件的事件過(guò)程中時(shí),允許拖放指定的控件;
2—結(jié)束控件的拖動(dòng),并發(fā)出一個(gè)DragDrop事件。例10-8(參看教材P181-183)2.自動(dòng)拖放前面我們說(shuō)過(guò),默認(rèn)情況下,對(duì)象的DragMode屬性為0,這時(shí)可以用手工方式來(lái)確定拖放,如果要實(shí)現(xiàn)自動(dòng)拖放,則需要把對(duì)象的DragMode屬性設(shè)置為“1-Automatic”。圖10-14說(shuō)明了實(shí)現(xiàn)自動(dòng)拖放在各個(gè)對(duì)象上所涉及的屬性、方法和事件。圖10-14自動(dòng)拖放涉及的屬性、方法和事件例10-9(參看教材P183-184)3.手動(dòng)拖放前面我們介紹了自動(dòng)拖放,下面我們介紹一下手動(dòng)拖放。與自動(dòng)拖放不同,手動(dòng)拖放不必把DragMode屬性設(shè)置為“1-Automatic”,仍保持默認(rèn)的“0-Manual”。圖10-16說(shuō)明了實(shí)現(xiàn)手動(dòng)拖放在各個(gè)對(duì)象上所涉及的屬性、方法和事件。圖10-16手動(dòng)拖放所涉及的屬性、方法和事件手動(dòng)拖放比自動(dòng)拖放提供了更多控制,可以由用戶自行決定何時(shí)拖放,何時(shí)停止,允許指定可以拖動(dòng)控件的時(shí)間以及不可拖動(dòng)控件的時(shí)間(在自動(dòng)拖放里,只要設(shè)置不變,就總能拖動(dòng)控件)。比如在響應(yīng)MouseUp和MouseDown事件或響應(yīng)鍵盤(pán)命令或菜單命令時(shí)得以進(jìn)行拖放。有了手動(dòng)拖放,還可以在開(kāi)始拖放前識(shí)別MouseDown事件,這樣就可以記錄鼠標(biāo)的位置。為了在代碼中啟動(dòng)拖放,應(yīng)將DragMode屬性保持默認(rèn)的“0-Manual”。然后,無(wú)論何時(shí)開(kāi)始拖放或停止拖放都要使用我們前面介紹的Drag方法(在一些特殊情況下,如果DragMode屬性為1,也可采用Drag方法編程實(shí)現(xiàn)控件的拖放)。Drag方法的操作值為1時(shí)可以拖放指定的控件;值為0或2時(shí)停止拖放,如值為0,則表示取消控件的拖放操作,如值為2則表示停止拖放,并產(chǎn)生DragDrop事件。Drag方法與MouseDown、MouseUp事件過(guò)程結(jié)合使用,可以實(shí)現(xiàn)手動(dòng)拖放。例10-10(參看教材P185-186)3.1.1JSP、Java與Javascript
1.聲明JSP聲明的作用是說(shuō)明將要使用的變量和方法,以保存信息或定義JSP頁(yè)面可能需要調(diào)用的方法,其作為范圍是整個(gè)頁(yè)面。因?yàn)镴SP是基于Java技術(shù)的,因此要求像Java一樣,對(duì)于將要在JSP程序中用到的變量和方法,必須先進(jìn)行聲明,不然將會(huì)出錯(cuò)。在聲明元素中聲明的變量和方法,將在JSP頁(yè)面初始化時(shí)進(jìn)行初始化。2.表達(dá)式
表達(dá)式用于將JSP內(nèi)容轉(zhuǎn)換為字符串以便于包含在頁(yè)面的輸出中。表達(dá)式表示的是一個(gè)在腳本語(yǔ)言中被定義的表達(dá)式,在運(yùn)行后被自動(dòng)轉(zhuǎn)化為字符串,然后插入到這個(gè)表達(dá)式在JSP文件中的位置顯示。因?yàn)楸磉_(dá)式的值已經(jīng)被轉(zhuǎn)化為字符串,所以能夠在一行文本中插入表達(dá)式。
表達(dá)式的使用格式如下:<%=expression%>
其中,expression部分是表達(dá)式的內(nèi)容,它是一個(gè)有計(jì)算結(jié)果的JSP表達(dá)式(注意,表達(dá)式一定要有一個(gè)可以輸出的值),如數(shù)學(xué)計(jì)算式子、有返回值的函數(shù)、變量等。3.腳本片段
腳本片段(Scriptlets)也稱(chēng)為代碼片段,它是一個(gè)有效的Java程序段,是JSP中的代碼部分。在這個(gè)部分中可以使用幾乎任何Java的語(yǔ)法來(lái)編制程序,它是嵌放在<%和%>標(biāo)記中的,語(yǔ)法格式如下:<%scriptlet%>4.注釋
注釋是程序設(shè)計(jì)中的常用工具,注釋通常有兩方面的作用:一個(gè)作用是作為提示,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 肝膽中醫(yī)養(yǎng)生知識(shí)
- 農(nóng)產(chǎn)品批發(fā)綜合市場(chǎng)供應(yīng)鏈管理與物流體系
- 第五單元第15課三、《網(wǎng)絡(luò)安全》教學(xué)設(shè)計(jì) 2023-2024學(xué)年人教版初中信息技術(shù)七年級(jí)上冊(cè)
- 第二課 信息傳輸新體驗(yàn) 教學(xué)設(shè)計(jì) 2024-2025學(xué)年西交大版(2024)初中信息技術(shù)七年級(jí)上冊(cè)
- 腦卒中治療和護(hù)理
- 二零二五年度銀聯(lián)國(guó)際個(gè)人信用卡領(lǐng)用與全球支付服務(wù)合同
- 2025至2030年中國(guó)帶置物架豪華淋浴房數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 二零二五年度房產(chǎn)贈(zèng)與子女協(xié)議書(shū)聯(lián)合子女房產(chǎn)租賃收益共同管理協(xié)議
- 互換性第1章 學(xué)習(xí)教材
- 2025年催化劑用載體合作協(xié)議書(shū)
- 《有機(jī)化學(xué)》課程說(shuō)課
- 軌道電路參數(shù)與狀態(tài)課件講解
- 2024年中華人民共和國(guó)企業(yè)所得稅年度納稅申報(bào)表(帶公式)20240301更新
- 2024年安徽省高考化學(xué)試卷(真題+答案)
- 現(xiàn)澆箱梁專(zhuān)項(xiàng)施工組織設(shè)計(jì)
- 結(jié)直腸癌治療研究進(jìn)展2024年
- TD/T 1072-2022 國(guó)土調(diào)查坡度分級(jí)圖制作技術(shù)規(guī)定(正式版)
- 員工薪酬確認(rèn)書(shū)三篇
- DZ∕T 0148-2014 水文水井地質(zhì)鉆探規(guī)程(正式版)
- 新能源汽車(chē)電氣技術(shù) 課件 項(xiàng)目一 新能源汽車(chē)電氣維修基礎(chǔ)認(rèn)知
- 人教版初中九年級(jí)下學(xué)期體育教案全集(附教學(xué)計(jì)劃)
評(píng)論
0/150
提交評(píng)論