第10章鍵盤與鼠標(biāo)_第1頁
第10章鍵盤與鼠標(biāo)_第2頁
第10章鍵盤與鼠標(biāo)_第3頁
第10章鍵盤與鼠標(biāo)_第4頁
第10章鍵盤與鼠標(biāo)_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 鍵盤事件鍵盤事件10.1與鼠標(biāo)相關(guān)的事件和屬性與鼠標(biāo)相關(guān)的事件和屬性10.2拖放拖放10.310.1.1 KeyPress事件事件10.1.2 KeyDown和和KeyUp事件事件 鍵盤是一種輸入數(shù)據(jù)或者信息的重要工具,鍵盤是一種輸入數(shù)據(jù)或者信息的重要工具,有些控件(如窗體和文本框)本身已經(jīng)具備了處有些控件(如窗體和文本框)本身已經(jīng)具備了處理輸入按鍵的功能,所以在簡單編程的情況下可理輸入按鍵的功能,所以在簡單編程的情況下可以不必編寫鍵盤事件過程。但是,如果要識(shí)別組以不必編寫鍵盤事件過程。但是,如果要識(shí)別組合鍵、功能鍵、光標(biāo)移動(dòng)鍵、小鍵盤(數(shù)字鍵盤合鍵、功能鍵、光標(biāo)移動(dòng)鍵、小鍵盤(數(shù)字鍵盤)上

2、的按鍵、區(qū)別按下和松開的動(dòng)作、對輸入字)上的按鍵、區(qū)別按下和松開的動(dòng)作、對輸入字符進(jìn)行篩選,就要使用鍵盤事件了,本章介紹的符進(jìn)行篩選,就要使用鍵盤事件了,本章介紹的鍵盤事件有鍵盤事件有KeyPress事件、事件、KeyDown事件和事件和KeyUp事件。事件。10.1.1 10.1.1 KeyPressKeyPress事件事件 KeyPress事件,就是當(dāng)按下鍵盤上的一個(gè)可打事件,就是當(dāng)按下鍵盤上的一個(gè)可打印字符鍵(字母、數(shù)字和符號)時(shí)所激發(fā)的事件。印字符鍵(字母、數(shù)字和符號)時(shí)所激發(fā)的事件。我們知道,在某個(gè)時(shí)刻,輸入焦點(diǎn)只能位于某一個(gè)我們知道,在某個(gè)時(shí)刻,輸入焦點(diǎn)只能位于某一個(gè)控件上(如果窗

3、體上沒有活動(dòng)的或可見的控件,則控件上(如果窗體上沒有活動(dòng)的或可見的控件,則輸入焦點(diǎn)位于窗體控件上),當(dāng)一個(gè)控件擁有輸入輸入焦點(diǎn)位于窗體控件上),當(dāng)一個(gè)控件擁有輸入焦點(diǎn)時(shí),該控件才能接受從鍵盤上輸入的信息,所焦點(diǎn)時(shí),該控件才能接受從鍵盤上輸入的信息,所以當(dāng)按下某個(gè)鍵時(shí),所激發(fā)的是擁有輸入焦點(diǎn)的那以當(dāng)按下某個(gè)鍵時(shí),所激發(fā)的是擁有輸入焦點(diǎn)的那個(gè)控件的個(gè)控件的KeyPress事件。支持事件。支持KeyPress事件的控件事件的控件有窗體、命令按鈕、文本框、復(fù)選框、單選框、列有窗體、命令按鈕、文本框、復(fù)選框、單選框、列表框、組合框、滾動(dòng)條與圖片框等。表框、組合框、滾動(dòng)條與圖片框等。 該事件過程的語法是:

4、該事件過程的語法是:Private Sub object_KeyPress(KeyAscii As Integer)End Sub 其中其中object是指支持是指支持KeyPress事件的控件事件的控件名,比如文本框控件的名,比如文本框控件的KeyPress事件的語法就事件的語法就是:是:Private Sub Text1_KeyPress(KeyAscii As Integer)End Sub 整形參數(shù)整形參數(shù)KeyAscii傳遞的是按鍵字符的傳遞的是按鍵字符的ASCII碼。碼。例如,當(dāng)按下例如,當(dāng)按下【F】鍵時(shí),鍵時(shí),KeyAscii的值為的值為70;按下;按下【!】鍵時(shí),鍵時(shí),KeyA

5、scii的值為的值為33等。我們可以使用等。我們可以使用Chr(KeyAscii)函數(shù)將)函數(shù)將KeyAscii參數(shù)轉(zhuǎn)變?yōu)橐粋€(gè)字符,例如參數(shù)轉(zhuǎn)變?yōu)橐粋€(gè)字符,例如Chr(70)=【F】。 KeyPress事件只能夠處理可打印的鍵盤字符和為數(shù)事件只能夠處理可打印的鍵盤字符和為數(shù)很少的幾個(gè)功能鍵,如很少的幾個(gè)功能鍵,如Enter(回車鍵)和(回車鍵)和BackSpace(退格鍵),對于其他功能鍵、編輯鍵和定位鍵,則不作退格鍵),對于其他功能鍵、編輯鍵和定位鍵,則不作響應(yīng)。如果要處理不被響應(yīng)。如果要處理不被KeyPress識(shí)別的擊鍵,則應(yīng)該使識(shí)別的擊鍵,則應(yīng)該使用用KeyDown和和KeyUp事件。事

6、件。 KeyPress事件在截取對事件在截取對TextBox或或ComboBox控件控件輸入的擊鍵時(shí)非常有用,它可以立即測試擊鍵的有效輸入的擊鍵時(shí)非常有用,它可以立即測試擊鍵的有效性并在字符輸入時(shí)對其進(jìn)行處理。我們?nèi)绻谛圆⒃谧址斎霑r(shí)對其進(jìn)行處理。我們?nèi)绻贙eyPress事件過程中改變了事件過程中改變了KeyAscii參數(shù)的值,就會(huì)參數(shù)的值,就會(huì)改變實(shí)際輸入的字符,將改變實(shí)際輸入的字符,將KeyAscii的值改變?yōu)榈闹蹈淖優(yōu)?時(shí)可取時(shí)可取消擊鍵,這樣對象便接收不到字符了。消擊鍵,這樣對象便接收不到字符了。 因?yàn)椴煌淖址囊驗(yàn)椴煌淖址腁SCII碼是不同的,所以利用碼是不同的,所以利用K

7、eyPress事件可以判斷和控制用戶的輸入,例如可以事件可以判斷和控制用戶的輸入,例如可以控制用戶在文本框中只能輸入數(shù)字或字母,還可以判控制用戶在文本框中只能輸入數(shù)字或字母,還可以判斷用戶輸入的字母是大寫還是小寫。斷用戶輸入的字母是大寫還是小寫。 我們把一個(gè)文本框控件(我們把一個(gè)文本框控件(Text1)拖到窗體上,然)拖到窗體上,然后進(jìn)入程序代碼窗口,在后進(jìn)入程序代碼窗口,在“過程過程”框中選擇框中選擇KeyPress,編寫如下代碼:,編寫如下代碼:Private Sub Text1_KeyPress(KeyAscii As Integer) Text1.Text = If KeyAscii

8、57 Then Beep KeyAscii = 0 Else KeyAscii = KeyAscii + 1 End IfEnd Sub 上述過程首先控制用戶的輸入,它只允許用戶輸入上述過程首先控制用戶的輸入,它只允許用戶輸入09的數(shù)字(的數(shù)字(0的的ASCII碼是碼是48,9的的ASCII碼是碼是57),如),如果輸入其他字符,則響鈴(果輸入其他字符,則響鈴(Beep),并消除該字符;然),并消除該字符;然后,再把用戶輸入的數(shù)字加后,再把用戶輸入的數(shù)字加1。 運(yùn)行上面的程序,在文本框中輸入一個(gè)運(yùn)行上面的程序,在文本框中輸入一個(gè)1,則會(huì)顯示,則會(huì)顯示2;輸入;輸入9的時(shí)候,則會(huì)顯示一個(gè)英文冒號

9、,因?yàn)橛⑽拿暗臅r(shí)候,則會(huì)顯示一個(gè)英文冒號,因?yàn)橛⑽拿疤柕奶柕腁SCII碼是碼是58。 上面我們說過,只有在窗體上沒有活動(dòng)或可見控件上面我們說過,只有在窗體上沒有活動(dòng)或可見控件時(shí),窗體才能接收鍵盤事件。如果我們希望優(yōu)先激活窗時(shí),窗體才能接收鍵盤事件。如果我們希望優(yōu)先激活窗體的鍵盤事件,則可以把窗體的體的鍵盤事件,則可以把窗體的KeyPreview屬性設(shè)置為屬性設(shè)置為True。這個(gè)屬性不只對。這個(gè)屬性不只對KeyPress事件有用,對事件有用,對KeyDown和和KeyUp事件同樣有用。事件同樣有用。例例10-1(參看教材(參看教材P164-166)10.1.2 10.1.2 KeyDownKey

10、Down和和KeyUpKeyUp事件事件 KeyDown事件是當(dāng)按下按鍵時(shí)觸發(fā),而事件是當(dāng)按下按鍵時(shí)觸發(fā),而KeyUp事件是當(dāng)釋放按鍵時(shí)觸發(fā),這兩個(gè)事件事件是當(dāng)釋放按鍵時(shí)觸發(fā),這兩個(gè)事件提供了最低級的鍵盤響應(yīng),可以報(bào)告鍵盤的物提供了最低級的鍵盤響應(yīng),可以報(bào)告鍵盤的物理狀態(tài),它們返回的是理狀態(tài),它們返回的是“鍵鍵”。這和。這和KeyPress事件不同,事件不同,KeyPress事件并不反映鍵盤的直接事件并不反映鍵盤的直接狀態(tài),它返回的是狀態(tài),它返回的是“字符字符”的的ASCII碼。碼。 我們進(jìn)一步舉例闡明這一差別。按下字母我們進(jìn)一步舉例闡明這一差別。按下字母鍵鍵“A”時(shí),時(shí),KeyDown所得到

11、的所得到的KeyCode碼(碼(KeyDown事件的參數(shù))與按字母鍵事件的參數(shù))與按字母鍵“a”時(shí)相同時(shí)相同,而對,而對KeyPress來說,所的到的來說,所的到的ASCII碼是不碼是不相同的。相同的。 這兩個(gè)事件過程的語法為:這兩個(gè)事件過程的語法為:Private Sub object_KeyDown(KeyCode As Integer, Shift As Integer)Private Sub object_KeyUp(KeyCode As Integer, Shift As Integer) 其中的其中的object是對象名,例如窗體的是對象名,例如窗體的KeyDow事件事件的語法為:

12、的語法為:Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) KeyDown和和KeyUp事件都是有兩個(gè)參數(shù),即事件都是有兩個(gè)參數(shù),即KeyCode和和Shift,下面對兩個(gè)參數(shù)的具體含義進(jìn)行解,下面對兩個(gè)參數(shù)的具體含義進(jìn)行解釋。釋。1 1KeyCodeKeyCode參數(shù)參數(shù) KeyCode是一個(gè)整形參數(shù),表示按鍵的代碼。每一是一個(gè)整形參數(shù),表示按鍵的代碼。每一個(gè)鍵都有相應(yīng)的鍵代碼,該碼是以個(gè)鍵都有相應(yīng)的鍵代碼,該碼是以“鍵鍵”為準(zhǔn),而不是為準(zhǔn),而不是以以“字符字符”為準(zhǔn),字母鍵的鍵代碼與此字母的大寫字符為準(zhǔn),字母鍵的鍵

13、代碼與此字母的大寫字符ASCII值相同。如上面介紹,大寫字母與小寫字母使用值相同。如上面介紹,大寫字母與小寫字母使用同一個(gè)鍵,它們的同一個(gè)鍵,它們的KeyCode相同,具體是大寫字母還是相同,具體是大寫字母還是小寫字母要通過與小寫字母要通過與Shift參數(shù)的組合來判斷。而大鍵盤上參數(shù)的組合來判斷。而大鍵盤上數(shù)字鍵和數(shù)字鍵盤上的相同的數(shù)字鍵的數(shù)字鍵和數(shù)字鍵盤上的相同的數(shù)字鍵的KeyCode是不一是不一樣的,因?yàn)樗鼈儾皇峭粋€(gè)樣的,因?yàn)樗鼈儾皇峭粋€(gè)“鍵鍵”。 Visual Basic為每個(gè)鍵代碼聲明了一個(gè)內(nèi)部常量。例為每個(gè)鍵代碼聲明了一個(gè)內(nèi)部常量。例如如F1鍵的鍵代碼為鍵的鍵代碼為112,相應(yīng)的

14、內(nèi)部常量為,相應(yīng)的內(nèi)部常量為vbKeyF1;Home鍵的鍵代碼為鍵的鍵代碼為36,內(nèi)部常量為,內(nèi)部常量為vbKeyHome。如表。如表10-1所示,列出了一些常用按鍵的所示,列出了一些常用按鍵的KeyCode值和內(nèi)部常值和內(nèi)部常量的對應(yīng)關(guān)系。量的對應(yīng)關(guān)系。表10-1 一些常用鍵的KeyCode值和內(nèi)部常數(shù)功能鍵KeyCode值常數(shù)功能鍵KeyCode值常數(shù)F1112vbKeyF1Enter13vbKeyReturnF2113VbKeyF2Esc27vbKeyEscapeF3114VbKeyF3PageUp33VbKeyPageUpF4115VbKeyF4PageDown34VbKeyPageD

15、ownF5116VbKeyF5Home35VbKeyHomeF6117VbKeyF6End36VbKeyEndF7118VbKeyF7Insert45VbKeyInsertF8119VbKeyF8Delete46VbKeyDeleteF9120VbKeyF937VbKeyLeftF10121vbKeyF1038VbKeyUpBackspace8vbKeyBack39VbKeyRightTab9vbKeyTab40vbKeyDown2 2ShiftShift參數(shù)參數(shù) Shift也是一個(gè)整形參數(shù),指示在按下一個(gè)鍵時(shí),也是一個(gè)整形參數(shù),指示在按下一個(gè)鍵時(shí),是否同時(shí)按下了是否同時(shí)按下了Shift、Ct

16、rl和和Alt鍵。它以二進(jìn)制形式鍵。它以二進(jìn)制形式表示,當(dāng)按下表示,當(dāng)按下Shift鍵時(shí),鍵時(shí),Shift參數(shù)的值為參數(shù)的值為001(十進(jìn)(十進(jìn)制數(shù)制數(shù)1);當(dāng)按下);當(dāng)按下Ctrl鍵時(shí),鍵時(shí),Shift參數(shù)的值為參數(shù)的值為010(十(十進(jìn)制數(shù)進(jìn)制數(shù)2);當(dāng)按下);當(dāng)按下Alt鍵時(shí),鍵時(shí),Shift參數(shù)的值為參數(shù)的值為100(十(十進(jìn)制數(shù)進(jìn)制數(shù)4)。如果三個(gè)鍵均未被按下,)。如果三個(gè)鍵均未被按下,Shift參數(shù)的值參數(shù)的值為為0,如果這三個(gè)鍵不只一個(gè)鍵被按下,則,如果這三個(gè)鍵不只一個(gè)鍵被按下,則Shift參數(shù)參數(shù)的值是被按下鍵相應(yīng)數(shù)值之和。例如,如果的值是被按下鍵相應(yīng)數(shù)值之和。例如,如果Shi

17、ft參數(shù)參數(shù)的值為的值為6,表明按下了,表明按下了Ctrl和和Alt兩個(gè)鍵。兩個(gè)鍵。 因此,因此,Shift參數(shù)的值共有參數(shù)的值共有8種可能,見表種可能,見表10-2。表10-2 Shift參數(shù)的值十進(jìn)制數(shù)二進(jìn)制數(shù)作用0000沒有按下轉(zhuǎn)換鍵1001按下Shift鍵2010按下Ctrl鍵3011按下Ctrl+Shift鍵4100按下Alt鍵5101按下Alt+Shift鍵6110按下Alt+Ctrl鍵7111按下Alt+Ctrl+Shift鍵 上面我們已經(jīng)說過,上面我們已經(jīng)說過,KeyDown是當(dāng)是當(dāng)一個(gè)鍵被按下時(shí)所產(chǎn)生的事件,而一個(gè)鍵被按下時(shí)所產(chǎn)生的事件,而KeyUp是當(dāng)松開被按下的鍵時(shí)所產(chǎn)生

18、的是當(dāng)松開被按下的鍵時(shí)所產(chǎn)生的事件,我們可以通過一個(gè)具體的程序來事件,我們可以通過一個(gè)具體的程序來說明。說明。 新建一個(gè)工程,窗體上不放任何控新建一個(gè)工程,窗體上不放任何控件,也可以把窗體的件,也可以把窗體的KeyPreview屬性設(shè)屬性設(shè)為為True,然后編寫如下事件:,然后編寫如下事件:Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Form1.ForeColor = &O0 Print 您現(xiàn)在按下了鍵盤上的某個(gè)鍵您現(xiàn)在按下了鍵盤上的某個(gè)鍵End SubPrivate Sub Form_KeyUp(Key

19、Code As Integer, Shift As Integer) Form1.ForeColor = &HFF Print 您現(xiàn)在松開了您按下的鍵您現(xiàn)在松開了您按下的鍵End Sub 程序運(yùn)行后,如果壓下某個(gè)鍵,則在窗體上連續(xù)顯示程序運(yùn)行后,如果壓下某個(gè)鍵,則在窗體上連續(xù)顯示“您現(xiàn)您現(xiàn)在按下了鍵盤上的某個(gè)鍵在按下了鍵盤上的某個(gè)鍵”,顏色為黑色,直到松開了該鍵,窗,顏色為黑色,直到松開了該鍵,窗體上顯示體上顯示“您現(xiàn)在松開了您按下的鍵您現(xiàn)在松開了您按下的鍵”,顏色為紅色。,顏色為紅色。例例10-2(參看教材(參看教材P168-169)10.2 10.2 與鼠標(biāo)相關(guān)的事件和屬性與鼠標(biāo)相

20、關(guān)的事件和屬性10.2.1 MouseDown、MouseUp和和MouseMove事件事件10.2.2 使用鼠標(biāo)事件使用鼠標(biāo)事件10.2.3 MousePointer和和MouseIcon屬性屬性 我們前面已經(jīng)多次使用過窗體和其他控件的我們前面已經(jīng)多次使用過窗體和其他控件的Click事件和事件和DblClick事件,這兩個(gè)是很簡單的鼠標(biāo)事件,事件,這兩個(gè)是很簡單的鼠標(biāo)事件,它們沒有參數(shù),當(dāng)程序在處理這兩個(gè)事件時(shí),不能確它們沒有參數(shù),當(dāng)程序在處理這兩個(gè)事件時(shí),不能確定用戶是在對象的什么位置上單擊鼠標(biāo),也不能確定定用戶是在對象的什么位置上單擊鼠標(biāo),也不能確定用戶單擊的是鼠標(biāo)的哪一個(gè)鍵,更不能確定

21、在單擊鼠用戶單擊的是鼠標(biāo)的哪一個(gè)鍵,更不能確定在單擊鼠標(biāo)時(shí)是否按下了鍵盤上的某個(gè)控制鍵(如標(biāo)時(shí)是否按下了鍵盤上的某個(gè)控制鍵(如Shift、Ctrl和和Alt鍵)。如果要在程序中得知上面所述各種狀態(tài),鍵)。如果要在程序中得知上面所述各種狀態(tài),就要處理下面的就要處理下面的MouseDown、MouseUp和和MouseMove事件。事件。 大家使用大家使用Windows及其應(yīng)用程序時(shí),可能會(huì)注意及其應(yīng)用程序時(shí),可能會(huì)注意到,當(dāng)鼠標(biāo)光標(biāo)位于不同的窗口內(nèi)時(shí),其形狀是不一到,當(dāng)鼠標(biāo)光標(biāo)位于不同的窗口內(nèi)時(shí),其形狀是不一樣的,有時(shí)候是箭頭狀,有時(shí)候是十字,有時(shí)候是豎樣的,有時(shí)候是箭頭狀,有時(shí)候是十字,有時(shí)候

22、是豎線等。在線等。在Visual Basic中,我們可以通過設(shè)置相關(guān)的屬中,我們可以通過設(shè)置相關(guān)的屬性來改變鼠標(biāo)的形狀。性來改變鼠標(biāo)的形狀。10.2.1 10.2.1 MouseDownMouseDown、MouseUpMouseUp和和MouseMoveMouseMove事件事件 具具M(jìn)ouseDown、MouseUp和和MouseMove事件的對象有窗體、命令按事件的對象有窗體、命令按鈕、文本框、復(fù)選框、單選框、框架、鈕、文本框、復(fù)選框、單選框、框架、圖像、標(biāo)簽、列表框和圖片框等。圖像、標(biāo)簽、列表框和圖片框等。 當(dāng)用戶在對象上按下鼠標(biāo)鍵時(shí)觸發(fā)當(dāng)用戶在對象上按下鼠標(biāo)鍵時(shí)觸發(fā)MouseDown

23、事件,事件過程的事件,事件過程的語法為:語法為:Private Sub object_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 當(dāng)用戶在對象上釋放鼠標(biāo)鍵時(shí)觸發(fā)當(dāng)用戶在對象上釋放鼠標(biāo)鍵時(shí)觸發(fā)MouseUp事件,事件過程的語法事件,事件過程的語法為:為:Private Sub object_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) 當(dāng)用戶在對象上移動(dòng)鼠標(biāo)時(shí)觸發(fā)當(dāng)用戶在對象上移動(dòng)鼠標(biāo)時(shí)觸發(fā)Mouse

24、Move事件,事件過程的語法事件,事件過程的語法為:為:Private Sub object_MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single) 語法中的語法中的object是只對象名,如是只對象名,如“Form”、“Command”等。等。 這三個(gè)事件過程與前面學(xué)過的其他事件過程最大的不同在于,它這三個(gè)事件過程與前面學(xué)過的其他事件過程最大的不同在于,它們都具有四個(gè)參數(shù)。通過這四個(gè)參數(shù)可以在程序中確定事件發(fā)生時(shí)詳們都具有四個(gè)參數(shù)。通過這四個(gè)參數(shù)可以在程序中確定事件發(fā)生時(shí)詳細(xì)的信息。這四個(gè)參數(shù)的取值與

25、意義如下。細(xì)的信息。這四個(gè)參數(shù)的取值與意義如下。1 1ButtonButton參數(shù)參數(shù) Button參數(shù)值是一個(gè)整形值,參數(shù)的參數(shù)值是一個(gè)整形值,參數(shù)的值反映事件發(fā)生時(shí)哪個(gè)鼠標(biāo)鍵被按下或值反映事件發(fā)生時(shí)哪個(gè)鼠標(biāo)鍵被按下或釋放。用釋放。用0,1,2位表示鼠標(biāo)的左、右、位表示鼠標(biāo)的左、右、中鍵,每位用中鍵,每位用1,0表示被按下或釋放,表示被按下或釋放,如圖如圖10-4所示。三個(gè)位的二進(jìn)制轉(zhuǎn)換成十所示。三個(gè)位的二進(jìn)制轉(zhuǎn)換成十進(jìn)制就是進(jìn)制就是Button的值,的值,1表示左鍵,表示左鍵,2表示表示右鍵,右鍵,4表示中鍵。表示中鍵。 圖10-4 Button參數(shù)與位的關(guān)系 對于對于MouseMove事

26、件,事件發(fā)生時(shí),可事件,事件發(fā)生時(shí),可能同時(shí)有兩個(gè)或三個(gè)鼠標(biāo)鍵被按下,這時(shí)能同時(shí)有兩個(gè)或三個(gè)鼠標(biāo)鍵被按下,這時(shí)Button參數(shù)是相應(yīng)的兩個(gè)或三個(gè)值的和。例參數(shù)是相應(yīng)的兩個(gè)或三個(gè)值的和。例如,如果如,如果MouseMove事件發(fā)生時(shí),事件發(fā)生時(shí),Button參參數(shù)的值是數(shù)的值是3,則表示鼠標(biāo)左鍵和右鍵都被按,則表示鼠標(biāo)左鍵和右鍵都被按下(下(1+2=3)。因?yàn)橐苿?dòng)鼠標(biāo)時(shí),可以不按)。因?yàn)橐苿?dòng)鼠標(biāo)時(shí),可以不按下任何一個(gè)鼠標(biāo)鍵,所以對于下任何一個(gè)鼠標(biāo)鍵,所以對于MouseMove事事件,這個(gè)參數(shù)的值可以為件,這個(gè)參數(shù)的值可以為0。2 2ShiftShift參數(shù)參數(shù) 此參數(shù)也是一個(gè)整數(shù),它表明在這三個(gè)

27、鼠標(biāo)此參數(shù)也是一個(gè)整數(shù),它表明在這三個(gè)鼠標(biāo)事件發(fā)生時(shí),鍵盤上的哪一個(gè)控制鍵被按下。事件發(fā)生時(shí),鍵盤上的哪一個(gè)控制鍵被按下。Shift參數(shù)的值為參數(shù)的值為1,表示,表示Shift鍵被按下;鍵被按下;Shift參參數(shù)的值為數(shù)的值為2,表示,表示Ctrl鍵被按下;鍵被按下;Shift參數(shù)的值為參數(shù)的值為4,表示,表示Alt鍵被按下。如果同時(shí)有兩個(gè)或三個(gè)控鍵被按下。如果同時(shí)有兩個(gè)或三個(gè)控制鍵被按下,則制鍵被按下,則Shift參數(shù)的值是相應(yīng)鍵的數(shù)值之參數(shù)的值是相應(yīng)鍵的數(shù)值之和。例如,當(dāng)事件發(fā)生時(shí),如果和。例如,當(dāng)事件發(fā)生時(shí),如果Shift鍵和鍵和Alt鍵鍵同時(shí)處于按下狀態(tài),則同時(shí)處于按下狀態(tài),則Shif

28、t參數(shù)值為參數(shù)值為5;如果事;如果事件發(fā)生時(shí),沒有鍵盤控制鍵被按下,則這個(gè)參數(shù)件發(fā)生時(shí),沒有鍵盤控制鍵被按下,則這個(gè)參數(shù)的值為的值為0。3 3X X參數(shù)、參數(shù)、Y Y參數(shù)參數(shù) 這兩個(gè)參數(shù)指明當(dāng)事件發(fā)生時(shí),鼠標(biāo)指針這兩個(gè)參數(shù)指明當(dāng)事件發(fā)生時(shí),鼠標(biāo)指針熱點(diǎn)所處位置的坐標(biāo),它們確定了鼠標(biāo)位置。熱點(diǎn)所處位置的坐標(biāo),它們確定了鼠標(biāo)位置。這里的這里的X、Y不需要給出具體的數(shù)值,它隨著鼠不需要給出具體的數(shù)值,它隨著鼠標(biāo)光標(biāo)在窗體上的移動(dòng)而變化。默認(rèn)情況下,標(biāo)光標(biāo)在窗體上的移動(dòng)而變化。默認(rèn)情況下,這個(gè)坐標(biāo)的原點(diǎn)在引發(fā)事件對象的左上角。這個(gè)坐標(biāo)的原點(diǎn)在引發(fā)事件對象的左上角。 應(yīng)該注意的是,當(dāng)移動(dòng)鼠標(biāo)時(shí),會(huì)不斷地

29、應(yīng)該注意的是,當(dāng)移動(dòng)鼠標(biāo)時(shí),會(huì)不斷地發(fā)生發(fā)生MouseMove事件。但是,并不是每經(jīng)過一事件。但是,并不是每經(jīng)過一點(diǎn)都會(huì)發(fā)生點(diǎn)都會(huì)發(fā)生MouseMove事件,而是在移動(dòng)過程事件,而是在移動(dòng)過程中每間隔很短的一段時(shí)間發(fā)生一個(gè)此事件。所中每間隔很短的一段時(shí)間發(fā)生一個(gè)此事件。所以,在相同的距離上,鼠標(biāo)移動(dòng)的速度越快,以,在相同的距離上,鼠標(biāo)移動(dòng)的速度越快,產(chǎn)生的產(chǎn)生的MouseMove事件就越少。事件就越少。 在對象上操作一次鼠標(biāo),會(huì)產(chǎn)生多個(gè)與鼠標(biāo)有關(guān)的事在對象上操作一次鼠標(biāo),會(huì)產(chǎn)生多個(gè)與鼠標(biāo)有關(guān)的事件,如:件,如:Click事件、事件、DblClick事件、事件、MouseDown事件、事件、Mo

30、useUp事件或事件或MouseMove事件。對于不同類型的對象,事件。對于不同類型的對象,這些事件的產(chǎn)生順序可能不同,還有些對象不支持其中的這些事件的產(chǎn)生順序可能不同,還有些對象不支持其中的某個(gè)事件。所以,在使用前一定要仔細(xì)測試。某個(gè)事件。所以,在使用前一定要仔細(xì)測試。 比如,在窗體上單擊,會(huì)依次引發(fā)比如,在窗體上單擊,會(huì)依次引發(fā)MouseDown事件、事件、MouseUp事件和事件和Click事件。在窗體上雙擊,會(huì)依次引發(fā)如事件。在窗體上雙擊,會(huì)依次引發(fā)如下事件:下事件:MouseDown、Click、DblClick、MouseUp。在命。在命令按鈕單擊,會(huì)依次引發(fā)令按鈕單擊,會(huì)依次引發(fā)

31、MouseDown、Click、MouseUp事事件。件。 當(dāng)一個(gè)控件不可見或無效時(shí),針對它的鼠標(biāo)操作會(huì)傳當(dāng)一個(gè)控件不可見或無效時(shí),針對它的鼠標(biāo)操作會(huì)傳遞到位于它下面的對象上。遞到位于它下面的對象上。10.2.2 10.2.2 使用鼠標(biāo)事件使用鼠標(biāo)事件 使用使用MouseMove事件,可以把命令事件,可以把命令按鈕移動(dòng)到窗體的不同位置,這樣可以按鈕移動(dòng)到窗體的不同位置,這樣可以設(shè)計(jì)一個(gè)程序,在用戶點(diǎn)擊窗體上的命設(shè)計(jì)一個(gè)程序,在用戶點(diǎn)擊窗體上的命令按鈕時(shí),命令按鈕就移動(dòng),使用戶點(diǎn)令按鈕時(shí),命令按鈕就移動(dòng),使用戶點(diǎn)不住這個(gè)按鈕。下面我們設(shè)計(jì)一個(gè)這樣不住這個(gè)按鈕。下面我們設(shè)計(jì)一個(gè)這樣有趣的程序。有趣

32、的程序。例例10-3(參看教材(參看教材P172-173)例例10-4 (參看教材(參看教材P173-174)例例10-5 (參看教材(參看教材P175-176)例例10-6 (參看教材(參看教材P176-177)10.2.3 10.2.3 MousePointerMousePointer和和MouseIconMouseIcon屬性屬性 前面我們已經(jīng)說過,在前面我們已經(jīng)說過,在Windows環(huán)境中,在不同環(huán)境中,在不同的窗口,不同的地方,鼠標(biāo)指針的形狀可能是不一樣的窗口,不同的地方,鼠標(biāo)指針的形狀可能是不一樣的,可以用不同的鼠標(biāo)指針來反映信息。在的,可以用不同的鼠標(biāo)指針來反映信息。在Visua

33、l Basic中,我們可以通過設(shè)置中,我們可以通過設(shè)置MousePointer和和MouseIcon屬性來改變鼠標(biāo)指針的形狀。屬性來改變鼠標(biāo)指針的形狀。 MousePointer屬性指定在運(yùn)行時(shí)當(dāng)鼠標(biāo)移動(dòng)到對屬性指定在運(yùn)行時(shí)當(dāng)鼠標(biāo)移動(dòng)到對象上時(shí)鼠標(biāo)指針的形狀,窗體和多數(shù)控件對象都具有象上時(shí)鼠標(biāo)指針的形狀,窗體和多數(shù)控件對象都具有這兩個(gè)屬性,該屬性既可以在屬性窗口中設(shè)置,也可這兩個(gè)屬性,該屬性既可以在屬性窗口中設(shè)置,也可以在程序代碼中設(shè)置。以在程序代碼中設(shè)置。 MousePointer屬性是一個(gè)整數(shù),可以取屬性是一個(gè)整數(shù),可以取015,其,其含義見表含義見表10-4。表10-4 MousePoi

34、nter屬性的取值常量值鼠標(biāo)指針的形狀vbDefault0(默認(rèn)值)形狀由對象決定vbArrow1箭頭vbCrosshair2十字線(Crosshair指針)vbIbeam3I型vbIconPointer4箭頭圖標(biāo)(嵌套方框)vbSizePointer5尺寸線(指向上、下、左和右4個(gè)方向的箭頭)vbSizeNESW6右上-左下尺寸線(指向右上和左下方向的雙箭頭)vbSizeNS7垂直尺寸線(指向上下兩個(gè)方向的雙箭頭)vbSizeNWSE8左上-右下尺寸線(指向左上和右下方向的雙箭頭)vbSizeWE9水平尺寸線(指向左右兩個(gè)方向的雙箭頭)vbUpArrow10向上的箭頭vbHourglass1

35、1沙漏(表示等待狀態(tài))vbNoDrop12沒有入口:一個(gè)圓形記號,表示控件移動(dòng)受限vbArrowHourglass13箭頭和沙漏vbArrowQuestion14箭頭和問號vbSizeAll15四向尺寸線(表示改變大小)vbCustom99通過MouseIcon屬性所指定的自定義圖標(biāo) 當(dāng)某個(gè)對象的當(dāng)某個(gè)對象的MousePointer屬性被設(shè)置為上表中的屬性被設(shè)置為上表中的某個(gè)值時(shí),鼠標(biāo)光標(biāo)在該對象內(nèi)就以相應(yīng)的形狀顯示。某個(gè)值時(shí),鼠標(biāo)光標(biāo)在該對象內(nèi)就以相應(yīng)的形狀顯示。例如,假定一個(gè)文本框的例如,假定一個(gè)文本框的MousePointer屬性被設(shè)置為屬性被設(shè)置為3,則當(dāng)鼠標(biāo)光標(biāo)進(jìn)入該文本框時(shí),鼠標(biāo)光

36、標(biāo)為則當(dāng)鼠標(biāo)光標(biāo)進(jìn)入該文本框時(shí),鼠標(biāo)光標(biāo)為“”形,而形,而在文本框之外,鼠標(biāo)光標(biāo)保持為默認(rèn)形狀。在文本框之外,鼠標(biāo)光標(biāo)保持為默認(rèn)形狀。 MouseIcon屬性使用一個(gè)圖標(biāo)文件來自定義鼠標(biāo)形屬性使用一個(gè)圖標(biāo)文件來自定義鼠標(biāo)形狀,圖標(biāo)文件一般以狀,圖標(biāo)文件一般以.ico和和.cur為擴(kuò)展名。只有當(dāng)為擴(kuò)展名。只有當(dāng)MousePointer屬性被設(shè)置為屬性被設(shè)置為99時(shí),該屬性才有效。在程時(shí),該屬性才有效。在程序中應(yīng)該使用序中應(yīng)該使用LoadPicture函數(shù)裝入磁盤文件來設(shè)置此屬函數(shù)裝入磁盤文件來設(shè)置此屬性,如下面一段代碼:性,如下面一段代碼: Form1.MousePointer = 99 For

37、m1.MouseIcon = LoadPicture(App.Path + ccc.ico) 在在Windows中,鼠標(biāo)指針的形狀的應(yīng)用有一些約定中,鼠標(biāo)指針的形狀的應(yīng)用有一些約定俗成的規(guī)則,為了和俗成的規(guī)則,為了和Windows環(huán)境相適應(yīng),在應(yīng)用程序環(huán)境相適應(yīng),在應(yīng)用程序中應(yīng)遵守這些規(guī)則,主要有以下幾點(diǎn):中應(yīng)遵守這些規(guī)則,主要有以下幾點(diǎn):(1)表示用戶當(dāng)前可用的功能,如)表示用戶當(dāng)前可用的功能,如“I”形鼠標(biāo)指針形狀(形鼠標(biāo)指針形狀(屬性值屬性值3)表示插入文本;十字形狀(屬性值)表示插入文本;十字形狀(屬性值2)表示畫)表示畫圓或線,或者表示選擇可視對象進(jìn)行復(fù)制或存取。圓或線,或者表示選擇

38、可視對象進(jìn)行復(fù)制或存取。(2)表示程序狀態(tài)的用戶可視線索,如沙漏(屬性值)表示程序狀態(tài)的用戶可視線索,如沙漏(屬性值11)表示程序忙,一段時(shí)間后將控制權(quán)交給用戶。表示程序忙,一段時(shí)間后將控制權(quán)交給用戶。(3)當(dāng)坐標(biāo)()當(dāng)坐標(biāo)(X,Y)值為)值為0時(shí),改變鼠標(biāo)指針的形狀。時(shí),改變鼠標(biāo)指針的形狀。 上面我們說過,上面我們說過,MousePointer屬性既可以在屬性屬性既可以在屬性窗口中設(shè)置,也可以在程序代碼中設(shè)置。在程序代碼窗口中設(shè)置,也可以在程序代碼中設(shè)置。在程序代碼中設(shè)置中設(shè)置MousePointer屬性的一般格式為:屬性的一般格式為: 對象對象. MousePointer = 設(shè)置值設(shè)置值

39、 這里的這里的“對象對象”可以是窗體、屏幕、框架、組合框可以是窗體、屏幕、框架、組合框、復(fù)選框、命令按鈕、文本框、標(biāo)簽、圖像、圖片框、復(fù)選框、命令按鈕、文本框、標(biāo)簽、圖像、圖片框、滾動(dòng)條、列表框、目錄列表框、驅(qū)動(dòng)器列表框、文、滾動(dòng)條、列表框、目錄列表框、驅(qū)動(dòng)器列表框、文件列表框等,件列表框等,“設(shè)置值設(shè)置值”是表是表10-4中的一個(gè)值。中的一個(gè)值。例例10-7(參看教材(參看教材P179)10.3 10.3 拖放拖放 在在Windows環(huán)境中,我們經(jīng)常使用拖放操環(huán)境中,我們經(jīng)常使用拖放操作。所謂拖放,就是在屏幕上用鼠標(biāo)把一個(gè)對作。所謂拖放,就是在屏幕上用鼠標(biāo)把一個(gè)對象從一個(gè)地方象從一個(gè)地方“拖

40、拉拖拉”到另一個(gè)地方再放下。到另一個(gè)地方再放下。拖放的一般過程是,把鼠標(biāo)光標(biāo)移動(dòng)到一個(gè)控拖放的一般過程是,把鼠標(biāo)光標(biāo)移動(dòng)到一個(gè)控件對象上,按下鼠標(biāo)左鍵,不要松開,然后移件對象上,按下鼠標(biāo)左鍵,不要松開,然后移動(dòng)鼠標(biāo),對象將隨鼠標(biāo)的移動(dòng)而在屏幕上拖動(dòng)動(dòng)鼠標(biāo),對象將隨鼠標(biāo)的移動(dòng)而在屏幕上拖動(dòng),在松開鼠標(biāo)鍵后,對象即被放下。通常把原,在松開鼠標(biāo)鍵后,對象即被放下。通常把原來位置的對象叫做源對象,而拖動(dòng)后放下的位來位置的對象叫做源對象,而拖動(dòng)后放下的位置的對象叫做目標(biāo)對象。置的對象叫做目標(biāo)對象。 為了有助于理解這種拖放,可以把拖放過為了有助于理解這種拖放,可以把拖放過程分解成兩個(gè)操作:拖動(dòng)和放下,程分

41、解成兩個(gè)操作:拖動(dòng)和放下,“拖動(dòng)拖動(dòng)”是是發(fā)生在源對象上的發(fā)生在源對象上的“拖拖”操作,操作,“放下放下”是發(fā)是發(fā)生在目標(biāo)對象上的生在目標(biāo)對象上的“放放”操作,即把源對象操作,即把源對象“放放”在目標(biāo)對象上。在目標(biāo)對象上。 Visual Basic中,設(shè)計(jì)模式下,各控件都可中,設(shè)計(jì)模式下,各控件都可以用鼠標(biāo)隨意拖放的方式來改變控件的大小和以用鼠標(biāo)隨意拖放的方式來改變控件的大小和位置,位置,VB的拖放功能使用戶在程序運(yùn)行時(shí)也的拖放功能使用戶在程序運(yùn)行時(shí)也具有這種功能。在拖動(dòng)過程中,被拖動(dòng)的對象具有這種功能。在拖動(dòng)過程中,被拖動(dòng)的對象變?yōu)榛疑?。變?yōu)榛疑?. 1.與拖放有關(guān)的屬性、事件和方法與拖放

42、有關(guān)的屬性、事件和方法 除了菜單、記時(shí)器和通用對話框除了菜單、記時(shí)器和通用對話框外,其他控件均可在程序運(yùn)行期間被外,其他控件均可在程序運(yùn)行期間被拖放。表拖放。表10-5列出了與拖放有關(guān)的屬列出了與拖放有關(guān)的屬性、事件和方法,使用這些屬性、事性、事件和方法,使用這些屬性、事件和方法能夠指定拖放操作的意義,件和方法能夠指定拖放操作的意義,而且能指定對于給定控件啟動(dòng)拖動(dòng)操而且能指定對于給定控件啟動(dòng)拖動(dòng)操作的方法。作的方法。表10-5 與拖放有關(guān)的屬性、事件和方法類別項(xiàng)目說明屬性DragMode啟動(dòng)自動(dòng)拖動(dòng)控件或手動(dòng)拖動(dòng)控件DragIcon指定拖動(dòng)控件時(shí)顯示的圖標(biāo)事件DragDrop識(shí)別何時(shí)將控件拖動(dòng)

43、到對象上DragOver識(shí)別何時(shí)在對象上拖動(dòng)控件方法Drag啟動(dòng)或停止手動(dòng)拖動(dòng) 拖放分為自動(dòng)拖放和手動(dòng)拖放,拖放分為自動(dòng)拖放和手動(dòng)拖放,DragMode屬性用來設(shè)置自動(dòng)或手動(dòng)拖放模式。在默認(rèn)情屬性用來設(shè)置自動(dòng)或手動(dòng)拖放模式。在默認(rèn)情況下,該屬性值為況下,該屬性值為0,這時(shí)可以用手工方式來確,這時(shí)可以用手工方式來確定拖放操作何時(shí)開始或結(jié)束。為了能對一個(gè)控定拖放操作何時(shí)開始或結(jié)束。為了能對一個(gè)控件執(zhí)行自動(dòng)拖放操作,必須把它的件執(zhí)行自動(dòng)拖放操作,必須把它的DragMode屬屬性設(shè)置為性設(shè)置為1,這時(shí)控件不能正常響應(yīng)鼠標(biāo)事件,這時(shí)控件不能正常響應(yīng)鼠標(biāo)事件,如如Click事件和事件和MouseDown事

44、件。該屬性可以在事件。該屬性可以在屬性窗口中設(shè)置,也可以在程序代碼中設(shè)置,屬性窗口中設(shè)置,也可以在程序代碼中設(shè)置,例如:例如: Text1.DragMode = 1 在拖動(dòng)一個(gè)對象的過程中,并不是對象本身在移在拖動(dòng)一個(gè)對象的過程中,并不是對象本身在移動(dòng),而是移動(dòng)代表對象的圖標(biāo)。也就是說,一旦要拖動(dòng),而是移動(dòng)代表對象的圖標(biāo)。也就是說,一旦要拖動(dòng)一個(gè)控件,這個(gè)控件就變成一個(gè)圖標(biāo),等放下后再動(dòng)一個(gè)控件,這個(gè)控件就變成一個(gè)圖標(biāo),等放下后再恢復(fù)成原來的控件,默認(rèn)為將源對象的灰色輪廓作為恢復(fù)成原來的控件,默認(rèn)為將源對象的灰色輪廓作為拖動(dòng)的圖標(biāo)。如果想用某個(gè)圖標(biāo)(擴(kuò)展名為拖動(dòng)的圖標(biāo)。如果想用某個(gè)圖標(biāo)(擴(kuò)展名

45、為.ico)來代)來代替該輪廓,則可以通過替該輪廓,則可以通過DragIcon屬性進(jìn)行設(shè)置。該屬屬性進(jìn)行設(shè)置。該屬性可以在屬性窗口進(jìn)行設(shè)置,也可以在程序中用性可以在屬性窗口進(jìn)行設(shè)置,也可以在程序中用LoadPicture函數(shù)進(jìn)行設(shè)置。例如:函數(shù)進(jìn)行設(shè)置。例如: Command1.DragIcon = LoadPicture(App.Path + aa.ico) 這里,用這里,用“aa.ico”作為命令按鈕的作為命令按鈕的DragIcon屬性屬性,當(dāng)拖動(dòng)該按鈕時(shí),按鈕變成,當(dāng)拖動(dòng)該按鈕時(shí),按鈕變成aa.ico所表示的圖標(biāo)。所表示的圖標(biāo)。 當(dāng)把控件(圖標(biāo))拖到目標(biāo)之后,如果松開鼠標(biāo)鍵當(dāng)把控件(圖標(biāo)

46、)拖到目標(biāo)之后,如果松開鼠標(biāo)鍵,則產(chǎn)生一個(gè),則產(chǎn)生一個(gè)DragDrop事件。該事件的過程語法為:事件。該事件的過程語法為:Private Sub object_DragDrop(Source As Control, X As Single, Y As Single)End Sub 其中的其中的“object”是指對象名,如是指對象名,如Form、Command1等。該事件過程有等。該事件過程有3個(gè)參數(shù),分別為:個(gè)參數(shù),分別為:Source、X和和Y。其中其中Source是一個(gè)對象變量,其類型為是一個(gè)對象變量,其類型為Control,該參數(shù),該參數(shù)含有被拖動(dòng)對象的屬性。可以像使用控件一樣使用它,

47、含有被拖動(dòng)對象的屬性。可以像使用控件一樣使用它,可以引用其屬性或調(diào)用其方法。例如:可以引用其屬性或調(diào)用其方法。例如: If Source.Name = form1 Then 用來判斷被拖動(dòng)對象的用來判斷被拖動(dòng)對象的Name屬性是否為屬性是否為“form1”。 參數(shù)參數(shù)X、Y是松開鼠標(biāo)鍵放下對象時(shí)鼠標(biāo)是松開鼠標(biāo)鍵放下對象時(shí)鼠標(biāo)光標(biāo)的位置。光標(biāo)的位置。 需要注意的是,如果沒有進(jìn)行編程設(shè)計(jì),需要注意的是,如果沒有進(jìn)行編程設(shè)計(jì),對象本身不會(huì)移動(dòng)到新的位置或被加到目標(biāo)對對象本身不會(huì)移動(dòng)到新的位置或被加到目標(biāo)對象中,用戶一定要在目標(biāo)對象的象中,用戶一定要在目標(biāo)對象的DragDrop事事件中進(jìn)行程序設(shè)計(jì)實(shí)現(xiàn)

48、真正的拖動(dòng)。件中進(jìn)行程序設(shè)計(jì)實(shí)現(xiàn)真正的拖動(dòng)。 在源對象被拖動(dòng)到目標(biāo)對象的過程在源對象被拖動(dòng)到目標(biāo)對象的過程中,如果經(jīng)過其他對象,則在這些對象中,如果經(jīng)過其他對象,則在這些對象上會(huì)產(chǎn)生上會(huì)產(chǎn)生DragOver事件,當(dāng)然在目標(biāo)對事件,當(dāng)然在目標(biāo)對象上也會(huì)產(chǎn)生象上也會(huì)產(chǎn)生DragOver事件,這個(gè)事件事件,這個(gè)事件發(fā)生在發(fā)生在DragDrop事件之前。事件之前。DragOver事事件過程語法為:件過程語法為:Private Sub object_DragOver(Source As Control, X As Single, Y As Single, State As Integer)End Sub

49、 該過程有該過程有4個(gè)參數(shù),其中個(gè)參數(shù),其中Source參數(shù)的含參數(shù)的含義和義和DragDrop事件的事件的Source參數(shù)義相同,參數(shù)義相同,X、Y是拖動(dòng)時(shí)鼠標(biāo)光標(biāo)的坐標(biāo)位置。是拖動(dòng)時(shí)鼠標(biāo)光標(biāo)的坐標(biāo)位置。State參數(shù)是一個(gè)參數(shù)是一個(gè)整數(shù)值,可以取以下整數(shù)值,可以取以下3個(gè)值:個(gè)值:0鼠標(biāo)光標(biāo)正進(jìn)入目標(biāo)對象的區(qū)域;鼠標(biāo)光標(biāo)正進(jìn)入目標(biāo)對象的區(qū)域;1 鼠標(biāo)光標(biāo)正退出目標(biāo)對象的區(qū)域;鼠標(biāo)光標(biāo)正退出目標(biāo)對象的區(qū)域;2鼠標(biāo)光標(biāo)正位于目標(biāo)對象的區(qū)域之內(nèi)。鼠標(biāo)光標(biāo)正位于目標(biāo)對象的區(qū)域之內(nèi)。 與拖放有關(guān)的方法不僅有與拖放有關(guān)的方法不僅有Drag方法,還有方法,還有Move方法,其中方法,其中Move方法我們

50、比較熟悉,下面主要介紹方法我們比較熟悉,下面主要介紹一下一下Drag方法。方法。 Drag方法的格式為:方法的格式為: 對象對象. Drag 整數(shù)整數(shù) 不管對象的不管對象的DragMode屬性如何設(shè)置,都可以屬性如何設(shè)置,都可以用用Drag方法來人工地啟動(dòng)或停止一個(gè)拖動(dòng)過程。方法來人工地啟動(dòng)或停止一個(gè)拖動(dòng)過程。“整數(shù)整數(shù)”的取值為的取值為0、1或或2,其含義分別為:,其含義分別為: 0取消指定控件的拖放;取消指定控件的拖放; 1 當(dāng)當(dāng)Drag方法出現(xiàn)在控件的事件過程中時(shí),允許拖放方法出現(xiàn)在控件的事件過程中時(shí),允許拖放指定的控件;指定的控件; 2結(jié)束控件的拖動(dòng),并發(fā)出一個(gè)結(jié)束控件的拖動(dòng),并發(fā)出一

51、個(gè)DragDrop事件。事件。例例10-8(參看教材(參看教材P181-183)2.2.自動(dòng)拖放自動(dòng)拖放 前面我們說過,默認(rèn)情況下,對象的前面我們說過,默認(rèn)情況下,對象的DragMode屬性為屬性為0,這時(shí)可以用手工方,這時(shí)可以用手工方式來確定拖放,如果要實(shí)現(xiàn)自動(dòng)拖放,式來確定拖放,如果要實(shí)現(xiàn)自動(dòng)拖放,則需要把對象的則需要把對象的DragMode屬性設(shè)置為屬性設(shè)置為“1-Automatic”。 圖圖10-14說明了實(shí)現(xiàn)自動(dòng)拖放在各個(gè)說明了實(shí)現(xiàn)自動(dòng)拖放在各個(gè)對象上所涉及的屬性、方法和事件。對象上所涉及的屬性、方法和事件。圖10-14 自動(dòng)拖放涉及的屬性、方法和事件例例10-9(參看教材(參看教材

52、P183-184)3.3.手動(dòng)拖放手動(dòng)拖放 前面我們介紹了自動(dòng)拖放,下面我們前面我們介紹了自動(dòng)拖放,下面我們介紹一下手動(dòng)拖放。與自動(dòng)拖放不同,手介紹一下手動(dòng)拖放。與自動(dòng)拖放不同,手動(dòng)拖放不必把動(dòng)拖放不必把DragMode屬性設(shè)置為屬性設(shè)置為“1-Automatic”,仍保持默認(rèn)的,仍保持默認(rèn)的“0-Manual”。 圖圖10-16說明了實(shí)現(xiàn)手動(dòng)拖放在各個(gè)說明了實(shí)現(xiàn)手動(dòng)拖放在各個(gè)對象上所涉及的屬性、方法和事件。對象上所涉及的屬性、方法和事件。圖10-16 手動(dòng)拖放所涉及的屬性、方法和事件 手動(dòng)拖放比自動(dòng)拖放提供了更多控制,可手動(dòng)拖放比自動(dòng)拖放提供了更多控制,可以由用戶自行決定何時(shí)拖放,何時(shí)停止,

53、允許以由用戶自行決定何時(shí)拖放,何時(shí)停止,允許指定可以拖動(dòng)控件的時(shí)間以及不可拖動(dòng)控件的指定可以拖動(dòng)控件的時(shí)間以及不可拖動(dòng)控件的時(shí)間(在自動(dòng)拖放里,只要設(shè)置不變,就總能時(shí)間(在自動(dòng)拖放里,只要設(shè)置不變,就總能拖動(dòng)控件)。拖動(dòng)控件)。 比如在響應(yīng)比如在響應(yīng)MouseUp和和MouseDown事件事件或響應(yīng)鍵盤命令或菜單命令時(shí)得以進(jìn)行拖放?;蝽憫?yīng)鍵盤命令或菜單命令時(shí)得以進(jìn)行拖放。有了手動(dòng)拖放,還可以在開始拖放前識(shí)別有了手動(dòng)拖放,還可以在開始拖放前識(shí)別MouseDown事件,這樣就可以記錄鼠標(biāo)的位事件,這樣就可以記錄鼠標(biāo)的位置。置。 為了在代碼中啟動(dòng)拖放,應(yīng)將為了在代碼中啟動(dòng)拖放,應(yīng)將DragMode屬

54、性保屬性保持默認(rèn)的持默認(rèn)的“0-Manual”。然后,無論何時(shí)開始拖放或停。然后,無論何時(shí)開始拖放或停止拖放都要使用我們前面介紹的止拖放都要使用我們前面介紹的Drag方法(在一些特方法(在一些特殊情況下,如果殊情況下,如果DragMode屬性為屬性為1,也可采用,也可采用Drag方方法編程實(shí)現(xiàn)控件的拖放)。法編程實(shí)現(xiàn)控件的拖放)。 Drag方法的操作值為方法的操作值為1時(shí)可以拖放指定的控件;時(shí)可以拖放指定的控件;值為值為0或或2時(shí)停止拖放,如值為時(shí)停止拖放,如值為0,則表示取消控件的拖,則表示取消控件的拖放操作,如值為放操作,如值為2則表示停止拖放,并產(chǎn)生則表示停止拖放,并產(chǎn)生DragDrop

55、事件。事件。Drag方法與方法與MouseDown、MouseUp事件過程結(jié)事件過程結(jié)合使用,可以實(shí)現(xiàn)手動(dòng)拖放。合使用,可以實(shí)現(xiàn)手動(dòng)拖放。例例10-10(參看教材(參看教材P185-186)1聲明聲明 JSP聲明的作用是說明將要使用的變聲明的作用是說明將要使用的變量和方法,以保存信息或定義量和方法,以保存信息或定義JSP頁面可頁面可能需要調(diào)用的方法,其作為范圍是整個(gè)頁能需要調(diào)用的方法,其作為范圍是整個(gè)頁面。面。 因?yàn)橐驗(yàn)镴SP是基于是基于Java技術(shù)的,因此要技術(shù)的,因此要求像求像Java一樣,對于將要在一樣,對于將要在JSP程序中用程序中用到的變量和方法,必須先進(jìn)行聲明,不然到的變量和方法,

56、必須先進(jìn)行聲明,不然將會(huì)出錯(cuò)。在聲明元素中聲明的變量和方將會(huì)出錯(cuò)。在聲明元素中聲明的變量和方法,將在法,將在JSP頁面初始化時(shí)進(jìn)行初始化。頁面初始化時(shí)進(jìn)行初始化。2表達(dá)式表達(dá)式 表達(dá)式用于將表達(dá)式用于將JSP內(nèi)容轉(zhuǎn)換為字符串內(nèi)容轉(zhuǎn)換為字符串以便于包含在頁面的輸出中。表達(dá)式表示以便于包含在頁面的輸出中。表達(dá)式表示的是一個(gè)在腳本語言中被定義的表達(dá)式,的是一個(gè)在腳本語言中被定義的表達(dá)式,在運(yùn)行后被自動(dòng)轉(zhuǎn)化為字符串,然后插入在運(yùn)行后被自動(dòng)轉(zhuǎn)化為字符串,然后插入到這個(gè)表達(dá)式在到這個(gè)表達(dá)式在JSP文件中的位置顯示。文件中的位置顯示。因?yàn)楸磉_(dá)式的值已經(jīng)被轉(zhuǎn)化為字符串,所因?yàn)楸磉_(dá)式的值已經(jīng)被轉(zhuǎn)化為字符串,所以

57、能夠在一行文本中插入表達(dá)式。以能夠在一行文本中插入表達(dá)式。 表達(dá)式的使用格式如下:表達(dá)式的使用格式如下: 其中,其中,expression部分是表達(dá)式的內(nèi)容,部分是表達(dá)式的內(nèi)容,它是一個(gè)有計(jì)算結(jié)果的它是一個(gè)有計(jì)算結(jié)果的JSP表達(dá)式(注意,表達(dá)式(注意,表達(dá)式一定要有一個(gè)可以輸出的值),如表達(dá)式一定要有一個(gè)可以輸出的值),如數(shù)學(xué)計(jì)算式子、有返回值的函數(shù)、變量等。數(shù)學(xué)計(jì)算式子、有返回值的函數(shù)、變量等。3腳本片段腳本片段 腳本片段(腳本片段(Scriptlets)也稱為代碼片)也稱為代碼片段,它是一個(gè)有效的段,它是一個(gè)有效的Java程序段,是程序段,是JSP中的代碼部分。在這個(gè)部分中可以使用幾中的代碼部分。在這個(gè)部分中可以使用幾乎任何乎任何Java的語法來編制程序,它是嵌放的語法來編制程序,它是嵌放在在標(biāo)記中的,語法格式如下:標(biāo)記中的,語法格式如下:4注釋注釋 注釋是程序設(shè)計(jì)中的常用工具,注釋注釋是程序設(shè)計(jì)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論