鍵盤與鼠標事件過程.ppt_第1頁
鍵盤與鼠標事件過程.ppt_第2頁
鍵盤與鼠標事件過程.ppt_第3頁
鍵盤與鼠標事件過程.ppt_第4頁
鍵盤與鼠標事件過程.ppt_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、9.1 KeyPress事件 9.2 KeyDown和KeyUP事件 9.3 鼠標事件 9.4 鼠標光標 9.5 拖放,第9章 鍵盤與鼠標事件過程 (2學時,9.1 KeyPress事件 KeyPress事件的語法如下: Sub Form_KeyPress(KeyAscii As Integer) Sub object_KeyPress(index As Integer, KeyAscii As Integer) 參數(shù)說明: Object為可以產(chǎn)生KeyPress事件的對象;Index是一個整數(shù),用來唯一標識一個在控件數(shù)組中的控件;KeyAscii用于返回一個標準ANSI鍵的ASCII碼。 K

2、eyAscii通過引用傳遞,對它進行改變可給對象發(fā)送一個不同的字符,將KeyAscii改變?yōu)?時可取消擊鍵,這樣來對象便接收不到所按鍵的字符。 關于KeyPress事件,要特別強調(diào)的就是下列兩點: (1) KeyAscii參數(shù)與后面的KeyDown和KeyUp事件中的KeyCode參數(shù)解釋是有區(qū)別的。 (2) 如果KeyPreview屬性被設置為True,窗體將先于該窗體上的控件接收此事件;如果KeyPreview屬性被設置為False,則窗體將不能接收該事件。KeyPreview的默認值是False,KeyPreview屬性可用來創(chuàng)建全局鍵盤處理例程,例9-1 將輸入到文本框Text1的文本

3、轉(zhuǎn)換為大寫,并將輸入的原始字符顯示在Text2中。程序運行結果如圖9-1所示。 Option Explicit Dim Str1 As String Private Sub Text1_KeyPress(KeyAscii As Integer) Str1 = Chr(KeyAscii) 將按鍵的ASCII值轉(zhuǎn)換為字符 KeyAscii = Asc(UCase(Str1) 將字符轉(zhuǎn)換為大寫,并重置Text1的字符 Text2.Text = Text2.Text & Str1 將輸入的原始字符復制到Text2中 End Sub,例9-1 KeyPress的用法,例如,數(shù)字的ASCII碼是在4857

4、范圍,下列事件處理只允許用戶在文本框中輸入數(shù)字(非數(shù)字字符被抑制): Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii 57 Then 輸入為非數(shù)字字符 KeyAscii = 0 抑制非數(shù)字字符的輸入 End If End Sub 在該事件處理過程中,就是對數(shù)字以外的字符進行攔截,將其KeyAscii參數(shù)更改為0,使控件最后接收到的是KeyAscii = 0的字符(空字符,但不是空格字符),這樣就抑制了那些字符的輸入,9.2 KeyDown和KeyUP事件 KeyDown事件過程 Sub Form_KeyDown(keyco

5、de As Integer, shift As Integer) Sub object_KeyDown(index As Integer,keycode As Integer, shift As Integer) KeyUp事件過程 Sub Form_KeyUp(keycode As Integer, shift As Integer) Sub object_KeyUp(index As Integer,keycode As Integer, shift As Integer) 參數(shù)說明 Index:是一個整數(shù),它用來唯一標識一個在控件數(shù)組中的控件。 KeyCode:是一個鍵的掃描碼,可以用諸

6、如vbKeyFl(F1鍵)的系統(tǒng)常量表示,它的值只與按鍵在鍵盤上的物理位置有關,與鍵盤的大小寫狀態(tài)無關;如果按的是兩個以上的組合鍵,KeyCode將先后得到所有這些不同物理位置鍵的掃描碼,Shift:參數(shù)是一個3位二進制的整數(shù),標明在該事件發(fā)生時是否還同時按了Shift、Ctrl和Alt這三個控制鍵。 Shift參數(shù)的表達與含義見下面表9-1,KeyPress與KeyDown、KeyUp的區(qū)別,窗體的: KeyPress KeyDown KeyUp,控件的: KeyPress KeyDown KeyUp,窗體的KeyPreview為True焦點在控件上輸入,Sub Form_KeyPress(

7、KeyAscii AsInteger) KeyAscii = KeyAscii + 1 End Sub,Sub Text1_KeyPress(KeyAscii As Integer) KeyAscii = KeyAscii + 1 End Sub,假定窗體KeyPreview為True,并有下面事件過程, 則當在文本框中輸入“1”時,實際上得到的是“3,窗體KeyPreview為False時 在文本框中輸入“1”時,實際上得到的是什么,在這里對KeyAscii 作一點修改將影響 所有控件,在這里對KeyAscii 作一點修改只 影響一個控件,則先發(fā)生這些窗體事件,接著又發(fā)生這些控件事件,對輸入

8、的數(shù)據(jù)進行驗證、限制和修改 (1) 修改輸入數(shù)據(jù),讓控件只能接收大寫字符 將KeyPreview設置為True,并寫下列Form_KeyPress事件代碼:Sub Form_KeyPress(KeyAscii As Integer) If KeyAscii = Asc(a) And KeyAscii 57 Then KeyAscii = 0 End If End Sub,例9-2 KeyDown和KeyUp的用法。鍵入Shift鍵、Ctrl鍵和Alt鍵分別與F2鍵的組合,用程序在文本框中顯示所輸入的鍵組合情況,KeyDown和KeyUP的用法,9.3 鼠標事件,9.3.1 MouseMove事

9、件 在窗體或控件對象上移動鼠標時發(fā)生MouseMove事件。 在窗體和控件上發(fā)生的MouseMove事件過程語法分別如下: Private Sub Form_MouseMove(Index As Integer,Button As Integer, Shift As Integer, x As Single, y As Single) 窗體上MouseMove事件的處理代碼 End Sub Private Sub object_MouseMove(Index As Integer,Button As Integer, Shift As Integer, x As Single, y As Si

10、ngle) 對象上MouseMove事件的處理代碼 End Sub 下面對Button、Shift、x和y等參數(shù)的含義進行說明(見下頁,1) Button參數(shù):描述所按下的鼠標鍵是哪一個,B0為1:表示按下了鼠標左鍵 B1為1:表示按下了鼠標右鍵 B2為1:表示按下了鼠標中鍵 例如:Button為2(010B),即B1 為1,表示按下了右鍵; 如果按了鼠標左鍵,則Button為1(001B)。 If Shift = 1 Then 或者 If Shift = vbLeftButton Then 這是按了鼠標左健后執(zhí)行的代碼 Endif 使用符號常數(shù): 1vbLeftButton:用戶按下鼠標左鍵

11、觸發(fā)了事件; 2vbRightButton:用戶按下鼠標右鍵觸發(fā)了事件; 4vbMiddleButton:用戶按下鼠標中鍵觸發(fā)了事件,2) Shift參數(shù):描述按下鼠標鍵時,還按了哪一個鍵盤控制鍵,B0為1:表示還按下了Shift鍵 B1為1:表示還按下了Ctrl鍵 B2為1:表示還按下了Alt鍵 例如: Shift為2(=010B),即B1 為1,表示只按下了Shift鍵; 如果同時按了Ctrl和Shift鍵二鍵,則Shift為3(=011B)。 If Shift = 1 And Button = 2 Then 這是僅按住Ctrl健且右擊鼠標后應執(zhí)行的代碼 End If Shift參數(shù)的符號

12、常數(shù)形式: 1vbShiftMask:表示Shift鍵被按下 2vbCtrlMask:表示Ctrl鍵被按下 4vbAltMask :表示Alt鍵被按下 if Shfit = vbAltMask And Button = 1 Then 這是僅按住Alt健且左擊鼠標后應執(zhí)行的代碼,3)X、Y:鼠標的當前位置坐標值。 例9-3 MouseMove事件及其參數(shù)的演示。在窗體上移動鼠標時,文本框Text1和Text2中分別顯示鼠標相對于窗體的實時位置坐標;在圖片框P1中移動鼠標時,文本框Text1和Text2中則分別顯示鼠標相對于圖片框的實時位置坐標。 下圖所示,是程序運行時鼠標在窗體左邊界上移動的某瞬

13、間的情景,例9-3 MouseMove事件及x,y參數(shù)的演示,例9-4 利用MouseMove事件結合繪圖方法,在鼠標移動時畫圖。 代碼如下: Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Line -(X, Y) 隨鼠標移動畫線 Circle (X, Y), 30 每發(fā)生一次MouseMove事件,就在線上畫一個園 End Sub,9.3.2 MouseDown和MouseUp事件 在窗體和控件上按下鼠標按鈕時,MouseDown事件發(fā)生。 Private S

14、ub Form_ MouseDown (Index As Integer,Button As Integer, Shift As Integer, x As Single, y As Single) 窗體上MouseDown事件的處理代碼 End Sub Private Sub object_ MouseDown (Index As Integer,Button As Integer, Shift As Integer, x As Single, y As Single) 對象上MouseDown事件的處理代碼 End Sub 對于Button、Shift、x、y參數(shù)的設置及含義,與Mouse

15、Move事件相同,9.3.2 MouseDown和MouseUp事件 在窗體和控件上釋放鼠標按鈕時, MouseUp事件發(fā)生。 Private Sub Form_ MouseUp (Index As Integer,Button As Integer, Shift As Integer, x As Single, y As Single) 窗體上MouseUp事件的處理代碼 End Sub Private Sub object_ MouseUp (Index As Integer,Button As Integer, Shift As Integer, x As Single, y As Si

16、ngle) 對象上MouseUp事件的處理代碼 End Sub 對于Button、Shift、x、y參數(shù)的設置及含義,與MouseMove事件相同,例9-5 結合MouseUp、MouseDown和MouseMov事件,設計一個直接用鼠標畫圖的簡單畫圖程序。實現(xiàn)如下功能:鼠標任意按鍵被按下時啟動繪圖狀態(tài),這時,當用戶按鼠標左鍵并移動時可以畫出寬度為2的細點(DrawWidth=2);而按鼠標右鍵移動時可以畫出寬度為6的粗點(DrawWidth=6)。而當鼠標按鍵彈起時,禁止繪圖功能,例9-5 結合三種鼠標事件畫圖,9.4 鼠標光標 9.4.1 利用MousePointer屬性改變鼠標指針樣式

17、MousePointer屬性可以用來定義顯示各種鼠標指針。 標指針的定義格式如下: 對象名稱.MousePointer=設定值 設定值為015時分別對應16種預定義的指針,9.4.2 利用MouseIcon屬性自定義鼠標指針 當MousePointer屬性值被設定成99時,還可以利用MouseIcon屬性自定義鼠標指針。MouseIcon屬性提供一個自定義圖標,即該屬性可以設置成一個圖標文件。 MouseIcon屬性值的設定既可利用屬性表在設計時指定;也可在運行時通過語句指定。用語句指定的語法如下: 對象名.MouseIconLoadPicture(PathName) 對象名.MouseIco

18、n另一對象名.Picture 例9-6 窗體上有一標簽Label1和一個計時器。設置標簽的鼠標指針,使鼠標指針指向標簽時成為手形指針。當單擊標簽時窗體中的鼠標指針成為系統(tǒng)忙指針,然后每隔1秒激發(fā)一次計時器事件;當調(diào)用5次計時器事件過程后停止計時器事件,同時窗體的鼠標指針恢復為默認指針。用語句實現(xiàn)上述指針變換功能。(設目錄E:Multi中的HAND-L.CUR文件為手形圖標,9.5 拖放 9.5.1 Drag方法 用于除了Line、Menu、Shape、Timer或CommonDialog 控件之外的任何控件的開始、結束或取消拖動操作。 Drag方法的語法格式如下: 控件名稱.Drag 參數(shù) 其

19、中,參數(shù)的含義為: 參數(shù)0:開始拖放操作 參數(shù)1:結束拖放操作。參數(shù) 1時可省略不寫。 參數(shù)2:取消拖放操作 通常,只有當對象的DragMode屬性設置為手工(0)時,才需要使用Drag方法控制拖放操作。但是,也可以對DragMode屬性設置為自動(1或vbAutomatic)的對象使用Drag,1. DragMode屬性 0:(缺省),手工拖動模式 1:自動拖動模式 2. DragIcon屬性 DragIcon屬性表示拖動過程中顯示的圖標(Ico或Cur文件)。 如果在拖動對象過程中想改變鼠標指針形狀,可使用DragIcon或MousePointer屬性。如果沒有指定DragIcon屬性,則

20、只能使用MousePointer屬性。 例如: Label1.DragIcon=LoadPicture (C:IconsMail.ico) Label2.DragIcon=picIcon.Picture,9.5.2 DragOver事件和DragDrop事件 1. DragOver事件 DragOver事件在拖放操作正在進行時發(fā)生。可使用此事件對鼠標指針在一個有效目標上的進入、離開或停頓等進行監(jiān)控。鼠標指針的位置決定接收此事件的目標對象。 DragOver事件的語法格式如下: Private Sub Form_DragOver(source As Control, x As Single, y

21、 As Single, state As Integer) Private Sub MDIForm_DragOver(source As Control, x As Single, y As Single, state As Integer) Private Sub object_DragOver(index As Integer,source As Control, x As Single, y As Single, state As Integer,例9-7 本例演示一種指示有效的拖放目標的方法。當一個TextBox控件被拖過一個PictureBox控件時,指針從缺省的箭頭變?yōu)樘囟ǖ膱D標。當源被拖到其它地方時,指針恢復到缺省的狀態(tài)。將TextBox控件的DragMode屬性設置為1,然后啟動程序,并把TextBox拖過PictureBox。

溫馨提示

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

評論

0/150

提交評論