第八章滑鼠與鍵盤事件的處理¬¬8章.pdf · 2012/4/29 第十一講次...

23
2012/4/29 第十一講次 第八章滑鼠與鍵盤事件的處理 單元目標 1.講解鍵盤事件程序。 2.說明鍵盤事件程序的實例探討。 3.講解滑鼠事件程序。 4.說明滑鼠鍵盤事件程序的實例探討。 摘要 使用者對鍵盤和滑鼠的操作是 Visual Basic 程式語言的主要事件的來源並 提供對有關滑鼠和鍵盤等相關事件的處理程序,本章主要講授與滑鼠和鍵盤相 關的事件 處理程序及實例探討。 第一節 鍵盤事件程序 Visual Basic 程式語言中,有一些控制項工具須使用鍵盤來輸入資 料(如文字方塊或輸入對話框等)或處理比較特殊的按鍵(如上、下、左、右 等鍵)或組合式按鍵(如 Ctrl 與 a 等)時,可直接使用鍵盤處理。在 Visual Basic 程式語言提供三個與鍵盤有關的事件(KeyPress、KeyDown KeyUp)用來處理鍵盤的工作。 1

Upload: others

Post on 14-Aug-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 第八章滑鼠與鍵盤事件的處理¬¬8章.pdf · 2012/4/29 第十一講次 第八章滑鼠與鍵盤事件的處理 單元目標 1.講解鍵盤事件程序。 2.說明鍵盤事件程序的實例探討。

2012/4/29

第十一講次

第八章滑鼠與鍵盤事件的處理 單 元 目 標

1.講 解 鍵 盤 事 件 程 序 。

2.說 明 鍵 盤 事 件 程 序 的 實 例 探 討 。

3.講 解 滑 鼠 事 件 程 序 。

4.說 明 滑 鼠 鍵 盤 事 件 程 序 的 實 例 探 討 。

摘 要

使 用 者 對 鍵 盤 和 滑 鼠 的 操 作 是 Visual Basic 程 式 語 言 的 主 要 事 件 的 來 源 並

提 供 對 有 關 滑 鼠 和 鍵 盤 等 相 關 事 件 的 處 理 程 序 , 本 章 主 要 講 授 與 滑 鼠 和 鍵 盤 相

關 的 事 件、處 理 程 序 及 實 例 探 討 。

第一節 鍵盤事件程序

在 Visual Basic 程 式 語 言 中,有 一 些 控 制 項 工 具 須 使 用 鍵 盤 來 輸 入 資

料 (如 文 字 方 塊 或 輸 入 對 話 框 等 )或 處 理 比 較 特 殊 的 按 鍵 (如 上、下、左、右

等 鍵 )或 組 合 式 按 鍵 (如 Ctrl 與 a 等 )時 , 可 直 接 使 用 鍵 盤 處 理 。 在 Visual

Basic 程 式 語 言 提 供 三 個 與 鍵 盤 有 關 的 事 件 (KeyPress 、 KeyDown 及

KeyUp)用 來 處 理 鍵 盤 的 工 作 。

1

Page 2: 第八章滑鼠與鍵盤事件的處理¬¬8章.pdf · 2012/4/29 第十一講次 第八章滑鼠與鍵盤事件的處理 單元目標 1.講解鍵盤事件程序。 2.說明鍵盤事件程序的實例探討。

2012/4/29

一 、 KeyPress鍵 盤 按 鍵 事 件

使用鍵盤鍵入資料時,當一有按鍵動作發生時,而所按的鍵為 ASCII 碼,就會產生 KeyPress 事件,並利用 e.KeyChar 參數讀取所鍵入的按鍵字元,將所按鍵的

字元轉成字元碼值。如下列所示:

2

Page 3: 第八章滑鼠與鍵盤事件的處理¬¬8章.pdf · 2012/4/29 第十一講次 第八章滑鼠與鍵盤事件的處理 單元目標 1.講解鍵盤事件程序。 2.說明鍵盤事件程序的實例探討。

2012/4/29

合 法 的 按 鍵 KeyAscii碼 值

1.鍵 盤 上 可 顯 示 的 字 元 (常 用 ):

大 寫 英 文 字 母 :A~Z: 小 寫 英 文 字 母 :a~z: 數 字 :0~9

所按鍵字元的 ASCII 碼值 65~90 97~122 48~57

2. 與 至 與 1 至 26

3. 13

4. 與 10

5. 8( 倒 退 鍵 )

6. 與 127

7. 9

8. (Space Bar) 32

【語法】Private Sub 物件名稱_KeyPress(……………..)

【功能】在物件上按某鍵時所傳回相對應的 ASCII 碼字元。

【說明】1.在 KeyPress 事件程序中,e.KeyChar 參數可傳回所按鍵的

字元(Character),若要顯示按鍵的字元的值須使用 Asc 函

數轉換成 ASCII 值,再使用 Chr 函數轉換成相對應的字元。

2.在 KeyPress 事件程序中,可使用 e.Handled 參數設定是否

忽略所鍵入的字元,預設值為 False 表示所鍵入的字元不

會被忽略,若值設為 True 表示所鍵入的字元會被忽略。

3.若所按的鍵為特殊功能鍵(F1~F10,Insert,Delete,

PageUp,PageDown,Home,End 或← ,→ ,↑ ,↓ )等鍵均

不會產生 KeyPress 事件也不會顯示所按鍵的字元。

範 例 8-1下 列 片 斷 程 式 為 將 所 鍵 入 的 字 元 判 斷 為 數 字、大 寫 字 母、小 寫 字 母 或 其

3

Page 4: 第八章滑鼠與鍵盤事件的處理¬¬8章.pdf · 2012/4/29 第十一講次 第八章滑鼠與鍵盤事件的處理 單元目標 1.講解鍵盤事件程序。 2.說明鍵盤事件程序的實例探討。

2012/4/29

他 字 元 , 將 所 按 鍵 字 元 及 Ascii值 印 出 。 1. Private Sub lblKeyIn_KeyPress(.....) Handles MyBase.KeyPress

2. Dim KeyAscii As Integer

3. Dim ch As String

4. ch = e.KeyChar

5. KeyAscii = Asc(ch)

6. If KeyAscii >= 48 And KeyAscii <= 57 Then

7. lblKeyIn.Text &= "所按鍵的字元為0-9之間" & vbNewLine

8. lblKeyIn.Text &= "所按鍵的字元為" & Chr(KeyAscii) & vbNewLine

9. lblKeyIn.Text &= "所按鍵的字元Ascii值為" & KeyAscii & vbNewLine

10. ElseIf KeyAscii >= 65 And KeyAscii <= 90 Then

11. lblKeyIn.Text &= "所按鍵的字元為A-Z之間" & vbNewLine

12. lblKeyIn.Text &= "所按鍵的字元為" & Chr(KeyAscii) & vbNewLine

13. lblKeyIn.Text &= "所按鍵的字元Ascii值為" & KeyAscii & vbNewLine

14. ElseIf KeyAscii >= 97 And KeyAscii <= 122 Then

15. lblKeyIn.Text &= "所按鍵的字元為a-z之間" & vbNewLine

16. lblKeyIn.Text &= "所按鍵的字元為" & Chr(KeyAscii) & vbNewLine

17. lblKeyIn.Text &= "所按鍵的字元Ascii值為" & KeyAscii & vbNewLine

18. Else

19. lblKeyIn.Text &= "所按鍵的字元為其他字元" & vbNewLine

20. lblKeyIn.Text &= "所按鍵的字元為" & Chr(KeyAscii) & vbNewLine

21. lblKeyIn.Text &= "所按鍵的字元Ascii值為" & KeyAscii & vbNewLine

22. End If

23. End Sub

說 明 使 用 Chr 函 數 將 ASCII 值 轉 換 成 相 對 應 的 字 元 :

①數 字 0-9, 使 用 Chr(48)轉 換 成 相 對 應 的 字 元 為 0, 使 用 Chr(57) 轉 換 成 相 對 應 的 字 元 為 9; ②英 文 字 母 :Chr(65)為 A, Chr(90)為 Z, Chr(97)為 a, Chr(122) 為 z。 僅 說 明 數 值 或 字 母 開 始 與 結 束 之 值 其 餘 數 值 或 字 母 請 自 行 推 敲 。

1. 第 1-23 列:使用者鍵入合法的字元會產生 KeyPress 事件並在標籤控制項 顯示所鍵入的字元。

2. 第 4 列:將所鍵入的字元傳送給 ch 變數。

3. 第 5 列:將所鍵入的字元使用 Asc 函數轉換成 ASCII 碼並傳送給 KeyAscii 變數。

4. 第 6 列: 判斷所鍵入字元的 ASCII 值是否在 48-57 之間,即所輸入的值是 否為 0-9 之間,並顯示按鍵字元。

4

Page 5: 第八章滑鼠與鍵盤事件的處理¬¬8章.pdf · 2012/4/29 第十一講次 第八章滑鼠與鍵盤事件的處理 單元目標 1.講解鍵盤事件程序。 2.說明鍵盤事件程序的實例探討。

2012/4/29

5. 第 10 列:判斷所鍵入字元的 ASCII 值是否在 65-90 之間,即所輸入的值是 否為 A-Z 之間,並顯示按鍵字元。

6. 第 14 列: 判斷所鍵入字元的 ASCII 值是否在 97-122 之間,即所輸入的值 是否為 a-z 之間,並顯示按鍵字元。

7. 第 18 列: 將所按鍵的字元設為其他字元,並顯示所按鍵字元。

執 行 結 果 執 行 時 分 別 鍵 入 小 寫 字 母 a、 數 字 5 及 大 寫 字 母 A, 結 果

分 別 如 下 所 示 :

二、KeyDown 和 KeyUp 鍵盤按鍵事件 使用 KeyPress 事件程序 只能顯示上述表列中的合法的按鍵字元,當鍵入的按鍵為一些特殊按鍵時,如:F1~F10,Home,End 等並不會產生 KeyPress 事件,須藉由 KeyDown 或 KeyUp 事件程序來處理。 當使用者按下鍵盤某鍵不放時,就會產生 KeyDown 事件;按某一鍵後再放開所按的鍵時,就會產生 KeyUp 事件;KeyUp 和 KeyDown 事件程序能處理KeyPress 事件所無法處理的按鍵字元,如功能鍵、編輯鍵和組合鍵等。KeyPress 事件可以傳回所按鍵字元的 ASCII 鍵碼,但是無法得知目前鍵盤是否仍被按著或按一下就放開。 當輸入一個字元,鍵盤事件的發生順序依序為(1)KeyDown 事件,(2)KeyPress 事件,(3)KeyUp 事件。將 KeyDown 及 KeyUp 事件的語法如下所示:

【 語 法 】 Private Sub 物 件 名 稱 _KeyDown(……………………..)

【 功 能 】 在 物 件 上 偵 測 到 某 一 鍵 被 按 住 。

【 語 法 】 Private Sub 物 件 名 稱 _KeyUp(…………………………)

【 功 能 】 在 物 件 上 偵 測 到 被 按 住 的 鍵 已 放 開 。

將 KeyDown 及 KeyUp 事 件 程 序 屬 性 用 法 說 明 如 下 :

5

Page 6: 第八章滑鼠與鍵盤事件的處理¬¬8章.pdf · 2012/4/29 第十一講次 第八章滑鼠與鍵盤事件的處理 單元目標 1.講解鍵盤事件程序。 2.說明鍵盤事件程序的實例探討。

2012/4/29

【 說 明 】 1.e.KeyCode 參 數 :可 透 過 e.KeyCode 參 數 值 判 斷 所 按 鍵 的 內 容 , 語 法 為 e.KeyCode=Keys.按 鍵 名 稱 , 茲 將 常 用 的 鍵 盤 按 鍵 、 數 值 與 名 稱 說 明 如 下 :

按 鍵 數 值 名 稱 按 鍵 數 值 名 稱

A~Z 65~90 A~Z a~z 65~90 a~z

0~9 48~57 0~9 Backspace 8 Back

Tab 9 Tab Enter 13 Enter

Shift 16 ShiftKey Ctr l 17 ControlKey

Alt 18 Menu Esc 27 Escape

PageUp 33 BASIC

Prior PageDown 34

Next

End 35 End Home 36 Home

← 37 Left ↑ 38 Up

→ 39 Right ↓ 40 Dowm

Insert 45 Insert Delete 46 Delete

F1 112 F1 F2 113 F2

F3 114 F3 F4 115 F4

F5 116 F5 F6 117 F6

F7 118 F7 F8 119 F8

F9 120 F9 F10 121 F10

F11 122 F11 F12 123 F12

6

Page 7: 第八章滑鼠與鍵盤事件的處理¬¬8章.pdf · 2012/4/29 第十一講次 第八章滑鼠與鍵盤事件的處理 單元目標 1.講解鍵盤事件程序。 2.說明鍵盤事件程序的實例探討。

2012/4/29

例 : 判 斷 有 無 按 Enter 鍵 可 撰 寫 成 e.KeyCode=Keys.Enter 也 可 撰 寫 成

e.KeyCode=13。

註 :當 按 大 寫 字 母 與 小 寫 字 母 的 e.KeyCode 值 均 相 同 , 如 按 A 與 a 其

e.KeyCode 值 均 為 65。

2. e.KeyData 參 數 :可 使 用 e.KeyData 判 斷 是 否 按 組 合 鍵 的 狀 態 : (1)使 用 e.Shift 判 斷 是 否 按 Sh ift 鍵 , 若 值 為 True 表 示 有 按 Shift 鍵 , 其 值 為 False 表 示 未 按 Shift 鍵 。 (2)使 用 e.Control 判 斷 是 否 按 Control 鍵 , 若 其 值 為 True 表 示 有 按 Control 鍵 , 其 值 為 False 表 示 未 按 Control 鍵 。 (3)判 斷 是 否 按 Alt 鍵 可 使 用 e.Alt 判 斷 , 若 其 值 為 True 表 示 有 按 Alt 鍵 , 其 值 為 False 表 示 未 按 Alt 鍵 。

範例 8-2 下列片斷程式為偵測在表單物件上按 Enter 鍵或與按組合鍵

(Shift、Ctrl 或 Alt 鍵)? 1. Private Sub Form1_Load(.....) Handles MyBase.Load

2. lblKeyDown.Text &= "Keycode" & Space(10) & "KeyData" & Space(20) & "按鍵內容" & vbNewLine

3. End Sub

4. Private Sub KeyDown_KeyDown(.....) Handles MyBase.KeyDown 5. If e.KeyCode = 13 Then

6. Select Case e.KeyData

7. Case Keys.Enter

8. lblKeyDown.Text &= e.KeyCode & Space(20) & e.KeyData.ToString & Space(24) _

& "只按Enter鍵" & vbNewLine

9. Case Keys.Enter + Keys.Shift

10. lblKeyDown.Text &= e.KeyCode & Space(20) & e.KeyData.ToString & Space(15) _

& "按Shift及Enter鍵" & vbNewLine

11. Case Keys.Enter + Keys.Control

12. lblKeyDown.Text &= e.KeyCode & Space(20) & e.KeyData.ToString & Space(12) _

& "按Ctrl及Enter鍵" & vbNewLine

13. Case Keys.Enter + Keys.Control + Keys.Shift

14. lblKeyDown.Text &= e.KeyCode & Space(20) & e.KeyData.ToString & Space(2) _

& "按Shift,Ctrl及Enter鍵" & vbNewLine

15. Case Keys.Enter + Keys.Alt

16. lblKeyDown.Text &= e.KeyCode & Space(20) & e.KeyData.ToString & Space(17) _

& "按Alt及Enter鍵" & vbNewLine

17. Case Keys.Enter + Keys.Alt + Keys.Shift

18. lblKeyDown.Text &= e.KeyCode & Space(20) & e.KeyData.ToString & Space(9) _

& "按Shift,Alt及Enter鍵" & vbNewLine

19. Case Keys.Enter + Keys.Alt + Keys.Control

20. lblKeyDown.Text &= e.KeyCode & Space(20) & e.KeyData.ToString & Space(5) _

& "按Ctrl,Alt及Enter鍵" & vbNewLine

21. Case Else

7

Page 8: 第八章滑鼠與鍵盤事件的處理¬¬8章.pdf · 2012/4/29 第十一講次 第八章滑鼠與鍵盤事件的處理 單元目標 1.講解鍵盤事件程序。 2.說明鍵盤事件程序的實例探討。

2012/4/29

22. lblKeyDown.Text &= e.KeyCode & Space(20) & e.KeyData.ToString & Space(5) _

& "按Ctrl,Alt,Shift及Enter鍵" & vbNewLine

23. End Select

24. End If

25. End Sub

說明

1. 第1-3列:執行時表單載入事件在標籤控制項顯示標題。 2. 第4-25列:當按下鍵盤產生KeyDown事件程序。 3. 第5列: 依據e.KeyCode參數偵 測 在 表 單 物 件 按 Enter鍵 (e.KeyCode= Keys.Enter)

‚ 當 按 Enter鍵 才 會 往 下 繼 續 判 斷 是否按組合鍵。 4. 第6列:依據e.KeyData參數判斷是否按組合鍵。

執行結果執行時分別按 Enter 鍵、Control 及 Enter 鍵 、Shift 及 Enter 鍵、

Control、Alt 及 Enter 鍵分別顯示結果如下所示:

範例 8-3 下列程式為使用方向鍵(上、下、左或右)移動汽車圖片的位置?

1. Dim x , y As Integer ‘宣告x與y為全域變數

2. Private Sub Form1_Load(...) Handles MyBase.Load

8

Page 9: 第八章滑鼠與鍵盤事件的處理¬¬8章.pdf · 2012/4/29 第十一講次 第八章滑鼠與鍵盤事件的處理 單元目標 1.講解鍵盤事件程序。 2.說明鍵盤事件程序的實例探討。

2012/4/29

3. x = picCar.Top ‘記錄圖片方塊的x座標

4. y = picCar.Left ‘記錄圖片方塊的y座標

5. End Sub

6. Private Sub Form1_KeyDown(.....) Handles MyBase.KeyDown

7. Select Case e.KeyCode

8. Case Keys.Up

9. picCar.Top -= 10

10. Case Keys.Down

11. picCar.Top += 10

12. Case Keys.Left

13. picCar.Left -= 10

14. Case Keys.Right

15. picCar.Left += 10

16. End Select

17. If picCar.Top = 0 Then

18. picCar.Top = Width

19. End If

20. If picCar.Top > Width Then

21. picCar.Top = 0

22. End If

23. If picCar.Left = 0 Then

24. picCar.Left = Height

25. End If

26. If picCar.Left > Height Then

27. picCar.Left = 0

28. End If

29. End Sub

30. Private Sub Form1_KeyUp(.....) Handles MyBase.KeyUp

31. picCar.Top = x

32. picCar.Left = y

33. End Sub

說明

1.第3-4列:分別記錄圖片方塊的x座標與記錄圖片方塊的x座標。 2.第6-29列:當按下鍵盤時產生KeyDown事件程序。 3.第7列: 使用e.KeyCod參數取得被按鍵的值,再依據其值判斷移動方向。 4.第8列:按向上按鈕其e.KeyCode=38(Keys.Up),車子往上移(即將picCar.Top-10)。 5.第10列:按向下按鈕其e.KeyCode=40(Keys.Down),車子往下移(即將picCar.Top+10)。 6.第12列:按下向左按鈕e.KeyCode=37(Keys.Left),車子往左移(即將picCar.Left-10)。 7.第14列:按下向右按鈕e.KeyCode=39(Keys.Right),車子往右移(即將picCar.Left+10)。 8.第17列: 判斷車子是否到達表單最上端,如果是則設定車子從表單最下端出現。 9.第20列: 判斷車子是否到達表單最下端,如果是則設定車子從表單最上端出現。 10. 第23列: 判斷車子是否到達表單最左端,如果是則設定車子從表單最右端出現。

9

Page 10: 第八章滑鼠與鍵盤事件的處理¬¬8章.pdf · 2012/4/29 第十一講次 第八章滑鼠與鍵盤事件的處理 單元目標 1.講解鍵盤事件程序。 2.說明鍵盤事件程序的實例探討。

2012/4/29

11. 第26列: 判斷車子是否到達表單最右端,如果是則設定車子從表單最左端出現。

12. 第30-33列:當鬆開鍵盤時產生KeyUp程序,將圖片之歸位。

執行結果執行時可按、、、鍵移動汽車圖片的位置:

範例 8-4 當輸入一個字元,說明鍵盤事件程序產生的個數及其先後順序?

1. Dim i As Integer

2. Private Sub Form1_Load(…..) Handles MyBase.Load

3. lblShow.Text &= "判斷所按鍵的字元是否為Ascii碼或按組合鍵" & vbNewLine

4. lblShow.Text &= Space(60) & "KeyCode" & Space(10) & "Shift" & Space(5) & "Ctrl"_

& Space(5) & "Alt" & vbNewLine

5. End Sub

6. Private Sub Form1_KeyDown(…..) Handles MyBase.KeyDown

7. i=0

8. i = i + 1

9. lblShow.Text &= i & ":KeyDown事件:所按鍵的字元為" & Space(5) & e.KeyCode & _

Space(20) & e.Shift & Space(5) & e.Control & Space(5) & e.Alt & vbNewLine

10. End Sub

11. Private Sub Form1_KeyPress(…..) Handles MyBase.KeyPress

12. Dim KeyAscii As Integer

13. Dim ch As String

14. ch = e.KeyChar

15. KeyAscii = Asc(ch)

16. i = i + 1

17. lblShow.Text &= i & ": KeyPress事件:所按鍵的字元為" & UCase(Chr(KeyAscii))

18. lblShow.Text &= "所按鍵的Ascii值為" & KeyAscii & vbNewLine

19. End Sub

20. Private Sub Form1_KeyUp(…..) Handles MyBase.KeyUp

21. i = i + 1

22. lblShow.Text &= i & ": KeyUp事件:所按鍵的字元為" & Space(5) & e.KeyCode & _

Space(20) & e.Shift & Space(5) & e.Control & Space(5) & e.Alt & vbNewLine

23. lblShow.Text &= vbNewLine

24. End Sub

10

Page 11: 第八章滑鼠與鍵盤事件的處理¬¬8章.pdf · 2012/4/29 第十一講次 第八章滑鼠與鍵盤事件的處理 單元目標 1.講解鍵盤事件程序。 2.說明鍵盤事件程序的實例探討。

2012/4/29

說明

1. 第 1 列:宣告 i 變數為整數型態的全域變數。 2. 第 2-5 列:載入表單事件程序,在標籤控制項上顯示標題。 3. 第 6-10 列:KeyDown 事件程序,當按住鍵盤時,會產生此事件,在標籤

控制項上顯示內容。 4. 第11-19列:KeyPress事件事件程序,當在鍵盤鍵入字元時,會產生此

事件。第17列Ucase函數為將鍵入的小寫字母字元轉換為大寫 字母字元。

5. 第19-24列:KeyUp事件程序,當放開鍵盤時,會產生此事件。

執 行 結 果 1.執 行 時,按 鍵 盤 a 會 產 生 3 個 鍵 盤 事 件 程 序 的 順 序 與 各 按 鍵 結

果 :

2.執 行 時,按 鍵 盤 Shift 及 a 時 會 產 生 5 個 鍵 盤 事 件 程 序 的 順 序

與 各 按 鍵 結 果 :

11

Page 12: 第八章滑鼠與鍵盤事件的處理¬¬8章.pdf · 2012/4/29 第十一講次 第八章滑鼠與鍵盤事件的處理 單元目標 1.講解鍵盤事件程序。 2.說明鍵盤事件程序的實例探討。

2012/4/29

第二節 滑鼠事件程序 在 Windows 作 業 系 統 中 , 滑 鼠 的 操 作 有 逐 漸 取 代 鍵 盤 的 某 些 功能,當 在 螢 幕 上 移 動 滑 鼠、按 下 滑 鼠 的 按 鈕 或 將 所 按 鈕 放 開,都 會 產生 滑 鼠 事 件 程 序 。

一、Click 事件

當 按 下 滑 鼠 左 鈕 一 下 再 放 開 滑 鼠 的 動 作 就 會 產 生 Click(按 一 下 )事件 。 【 語 法 】 Private Sub 物 件 名 稱 _Click(………) 【 功 能 】 在 指 定 的 物 件 上 按 滑 鼠 左 鈕 一 下 , 會 產 生 Click 事 件 。 【 說 明 】 Click 事 件 只 能 偵 測 出 使 用 者 用 滑 鼠 在 指 定 的 物 件 上 按 鈕 一 下 , 而 無 法 偵 測 是 按 左 鈕 、 右 鈕 或 中 間 鈕 , 若 要 偵 測 出 是 按 那 一 個 鈕 ?需 由 MouseDown 或 MouseUp 事 件 才 能 偵 測 出 。

二、DoubleClick 事件

當 連 按 滑 鼠 二 下 再 放 開 滑 鼠 的 動 作 稱 為 Double Click( 連 按 二下 ) 事 件 。 【 語 法 】 Private Sub 物 件 名 稱 _DoubleClick(………) 【 功 能 】 在 指 定 的 物 件 上 連 按 滑 鼠 兩 下 , 會 產 生 DoubleClick 事 件 。 【 說 明 】 產 生 DoubleClick 事 件 之 前 , 會 先 產 生 Click 事 件 。

12

Page 13: 第八章滑鼠與鍵盤事件的處理¬¬8章.pdf · 2012/4/29 第十一講次 第八章滑鼠與鍵盤事件的處理 單元目標 1.講解鍵盤事件程序。 2.說明鍵盤事件程序的實例探討。

2012/4/29

三、MouseDown、 MouseUp 與 MouseMove 事 件

在 滑 鼠 上 按 下 任 一 鈕 , 會 產 生 MouseDown(按 下 )事 件 ; 按 下 滑 鼠 鈕 後 再

放 開 , 會 產 生 MouseUp( 放 開 ) 事 件 ; 而 在 物 件 上 移 動 滑 鼠 指 標 , 則 會 產 生

MouseMove(移 動 )事 件 。 此 三 事 件 被 產 生 時 , 當 按 下 滑 鼠 再 放 開 會 產 生 三 個 事

件 依 序 為 (1) MouseDown 事 件 (2) Click 事 件 (3) MouseUp 事 件。因 此 在 撰 寫 程

式 碼 時 應 注 意 將 程 式 碼 撰 寫 於 那 一 事 件 程 序 中 , 並 避 免 程 式 碼 重 覆 或 互 相 衝

突 。 茲 將 MouseMove、 MouseDown 及 MouseUp 事 件 的 語 法 說 明 如 下 :

(一 )MouseMove 事 件

【 語 法 】 Private Sub 物 件 名 稱 _MouseMove(… )

【 功 能 】 在 物 件 上 偵 測 到 滑 鼠 鈕 正 在 移 動 , 會 產 生 MouseMove 事 件 。

(二 )MouseDown 事 件

【 語 法 】 Private Sub 物 件 名 稱 _MouseDown(… )

【 功 能 】 在 物 件 上 偵 測 到 滑 鼠 鈕 被 按 住 , 會 產 生 MouseDown 事 件 。

(三 )MouseUp 事 件

【 語 法 】 Private Sub 物 件 名 稱 _MouseUp(… )

【 功 能 】 在 物 件 上 偵 測 到 所 按 住 之 滑 鼠 鈕 已 放 開 , 會 產 生 MouseUp 事 件 。

將 MouseMove、 MouseDown 及 MouseUp 事 件 屬 性 在 使 用 上 說 明 如 下 :

1. e.Button 參 數 : 可 判 斷 所 按 下 為 滑 鼠 的 那 一 個 按 鈕 , 判 斷 方 式 為

e.Button=MouseButtons.Left 表 示 按 滑鼠左鈕;

e.Button=MouseButtons.Middele 表 示 按 滑鼠中鈕被按下;

e.Button=MouseButtons.Right 表 示 按 滑鼠右 鈕被按下。

2.X 屬 性 : 表 示 當 滑 鼠 鈕 被 按 下 或 放 開 時 , 游 標 所 在 的 X 坐 標 值 (e.X)。

3.Y 屬 性 : 表 示 當 滑 鼠 鈕 被 按 下 或 放 開 時 , 游 標 所 在 的 Y 坐 標 值 (e.Y)。

13

Page 14: 第八章滑鼠與鍵盤事件的處理¬¬8章.pdf · 2012/4/29 第十一講次 第八章滑鼠與鍵盤事件的處理 單元目標 1.講解鍵盤事件程序。 2.說明鍵盤事件程序的實例探討。

2012/4/29

範 例 8-5 下 列 MouseDown 事 件 程 序 為 判 斷 所 按 下 滑 鼠 為 何 鈕 及 游 標

位 置 ? 1. Private Sub lblShow_MouseDown(.....) Handles lblShow.MouseDown

2. Select Case e.Button

3. Case e.Button.Left

4. lblShow.Text &= "按滑鼠左鈕" & "X=" & e.X & "Y=" & e.Y & vbNewLine

5. Case e.Button.Right

6. lblShow.Text &= "按滑鼠右鈕" & "X=" & e.X & "Y=" & e.Y & vbNewLine

7. Case e.Button.Middle

8. lblShow.Text &= "按滑鼠中間鈕" & "X=" & e.X & "Y=" & e.Y & vbNewLine

9. End Select 10. End Sub

說 明

1. 第 1-10 列:MouseDown 事件程序,當滑 鼠 鈕 被 按 住 時 會 產 生 MouseDown 事 件 。

2. 第 2-9 列:使用 e.Button 參數,判斷滑鼠的那一鈕(左鈕,右鈕或中間鈕) 被按下並傳回滑鼠所在的 坐 標 值 。

執 行 結 果 執 行 時 , 按 滑 鼠 左 鈕 顯 示 如 下 結 果 :

範 例 8-6 在 標 籤 控 制 項 上 按 滑 鼠 左 鈕 , 說 明 MouseDown 、 Click 及

MouseUp 事 件 執 行 的 順 序 。 1. Dim i As Integer

2. Private Sub lblShow_MouseDown(.....) Handles lblShow.MouseDown

3. i = 0

4. i = i + 1

5. lblShow.Text &= "順序" & i & "偵測到滑鼠鍵被按一下" & vbNewLine

6. End Sub

7. Private Sub lblShow_Click(.....) Handles lblShow.Click

8. i = i + 1

9. lblShow.Text &= "順序" & i & "按滑鼠鍵一下" & vbNewLine

10. End Sub

11. Private Sub lblShow_MouseUp(.....) Handles lblShow.MouseUp

12. i = i + 1

14

Page 15: 第八章滑鼠與鍵盤事件的處理¬¬8章.pdf · 2012/4/29 第十一講次 第八章滑鼠與鍵盤事件的處理 單元目標 1.講解鍵盤事件程序。 2.說明鍵盤事件程序的實例探討。

2012/4/29

13. lblShow.Text &= "順序" & i & "偵測到滑鼠鍵被鬆開" & vbNewLine

14. End Sub

說 明 執 行 時,當 在 標 籤 控 制 項 上 按 滑 鼠 左 鈕 時,先 產 生 MouseDown 事 件、

再 者 為 Click 事 件 , 最 後 才 產 生 MouseUp 事 件 。

1. 第 1 列:宣告 i 變數為整數型態的全域變數。 2. 第 2-6 列:當按住滑鼠時會產生 MouseDown 事件程序。 3. 第7-10列:當按滑鼠任何一鍵時會產生Click事件程序。 4. 第11-14列: 當鬆開滑鼠時會產生MouseUp事件程序。

執 行 結 果 執 行 時 , 在 標 籤 控 制 項 上 按 滑 鼠 左 鈕 時 , 顯 示 如 下 結 果 :

範 例 8-7 製 作 一 個 可 自 行 按 滑 鼠 鈕 操 控 的 交 通 號 誌 程 式 。

(1)當 按 任 何 滑 鼠 鈕 時 , 顯 示 綠 燈 亮 。

(2)當 按 滑 鼠 左 鈕 一 下 , 則 顯 示 黃 燈 亮 。

(3)若 按 滑 鼠 右 鈕 , 則 顯 示 紅 燈 亮 。

(4)若 按 滑 鼠 中 間 鈕 , 顯 示 綠 燈 亮 。

picPicture 一 、 建 立 如 下 圖 表 單

picRed

picYellow

btnEnd

picGreen

二 、 設 定 物 件 之 屬 性 值

15

Page 16: 第八章滑鼠與鍵盤事件的處理¬¬8章.pdf · 2012/4/29 第十一講次 第八章滑鼠與鍵盤事件的處理 單元目標 1.講解鍵盤事件程序。 2.說明鍵盤事件程序的實例探討。

2012/4/29

物 件 屬 性 名 稱

Name ( 物 件 名 稱 )

Text ( 標 題 文 字 )

Font/大 小 ( 字 型 大 小 )

Form1 Form1 交 通 號 誌 9

Button1 btnEnd 結 束 12

PictureBox1 picYellow <空 字 串 > -

PictureBox2 picGreen <空 字 串 > -

PictureBox3 picRed <空 字 串 > -

PictureBox4 picPicture <空 字 串 > -

三 、 程 式 碼 如 下 所 示 :

1. Private Sub Form1_Load(.....) Handles MyBase.Load

2. picGreen.Visible = False

3. picRed.Visible = False

4. picYellow.Visible = False

5. picPicture.Image = picGreen.Image

6. End Sub

7. Private Sub Form1_MouseDown(.....) Handles MyBase.MouseDown

8. If e.Button = MouseButtons.Left Then

9. picPicture.Image = picYellow.Image

10. ElseIf e.Button = MouseButtons.Right Then

11. picPicture.Image = picRed.Image

12. Else

13. picPicture.Image = picGreen.Image

14. End If

15. End Sub

16. Private Sub btnEnd_Click(.....) Handles btnEnd.Click

17. End

18. End Sub

說明

1. 第1-6列:載入表單時先將三個號誌皆隱藏,再將顯示綠燈號誌設至 picPicture圖片方塊控制項會顯示綠燈。

2. 第7-15列:當按下滑鼠鈕時會產生MouseDown事件程序,第8列e.Button屬 性判斷按下哪一鈕,當按下左鈕將顯示黃燈號誌設至則 picPicture圖片方塊會顯示黃燈,按下右鈕將顯示紅燈號誌設 至picPicture圖片方塊顯示紅燈,按下中間鈕將顯示綠燈號誌 設至picPicture圖片方塊顯示綠燈。

16

Page 17: 第八章滑鼠與鍵盤事件的處理¬¬8章.pdf · 2012/4/29 第十一講次 第八章滑鼠與鍵盤事件的處理 單元目標 1.講解鍵盤事件程序。 2.說明鍵盤事件程序的實例探討。

2012/4/29

執 行 結 果 執 行 程 式 時 先 顯 示 綠 燈 , 當 按 下 左 鈕 將 顯 示 黃 燈 如 下 圖 所 示 :

四、MouseEnter、 MouseLeave 與 MouseHover 事 件

當 滑 鼠 游 標 移 動 進 入 物 件 的 範 圍 內 時,會 產 生 MouseEnter(進 下 )事 件;當

滑 鼠 游 標 離 開 物 件 的 範 圍 內 時 , 會 產 生 MouseLeave(離 開 )事 件 ; 當 滑 鼠 游 標

移 動 進 入 物 件 的 範 圍 內 後 , 稍 作 停 留 會 產 生 MouseHover(停 留 )事 件 。 茲 將

MouseEnterMouseLeave 及 MouseHover 事 件 的 語 法 說 明 如 下 :

(一 )MouseEnter 事 件

【 語 法 】 Private Sub 物 件 名 稱 _MouseEnter(… )

【 功 能 】 當 滑 鼠 游 標 移 動 進 入 物 件 的 範 圍 內 時 , 會 產 生 MouseEnter 事 件

(二 )MouseLeave 事 件

【 語 法 】 Private Sub 物 件 名 稱 _MouseLeave(… )

【 功 能 】 當 滑 鼠 游 標 離 開 物 件 的 範 圍 內 時 , 會 產 生 MouseLeave 事 件

(三 )MouseHover 事 件

【 語 法 】 Private Sub 物 件 名 稱 _MouseHover(… )

【 功 能 】 當 滑 鼠 游 標 移 動 進 入 物 件 的 範 圍 內 後 , 稍 作 停 留 會 產 生 MouseHover

事 件

範例 8-8MouseEnter、MouseLeave 與 MouseHover 事件實例演練

17

Page 18: 第八章滑鼠與鍵盤事件的處理¬¬8章.pdf · 2012/4/29 第十一講次 第八章滑鼠與鍵盤事件的處理 單元目標 1.講解鍵盤事件程序。 2.說明鍵盤事件程序的實例探討。

2012/4/29

1.程式執行時在標籤控制項顯示老師第一站參觀哪一區,如下圖所示:

2.當滑鼠指標指向參觀的區(如海豚區) 在標籤控制項顯示好可愛的海豚

3.當滑鼠在參觀的區停留一會(如海豚區) 在標籤控制項顯示你看海豚在表演

18

Page 19: 第八章滑鼠與鍵盤事件的處理¬¬8章.pdf · 2012/4/29 第十一講次 第八章滑鼠與鍵盤事件的處理 單元目標 1.講解鍵盤事件程序。 2.說明鍵盤事件程序的實例探討。

2012/4/29

4.當滑鼠指標離開參觀的區(如海豚區)在標籤控制項顯示下一站我們要參觀哪

一區

'設定初值

Private Sub Form1_Load(…..) Handles MyBase.Load

lblShow.Text = "老師第一站參觀哪一區"

End Sub

'進入海豚區

Private Sub picDolphin_MouseEnter(…..) Handles picDolphin.MouseEnter

lblShow.Text = "好可愛的海豚"

End Sub

'在海豚區停留

Private Sub picDolphin_MouseHover(…..) Handles picDolphin.MouseHover

lblShow.Text = "你看海豚在表演"

End Sub

'離開海豚區

Private Sub picDolphin_MouseLeave(…..) Handles picDolphin.MouseLeave

lblShow.Text = "下一站我們要參觀哪一區"

End Sub

'進入企鵝區

Private Sub picPenguin_MouseEnter(…..) Handles picPenguin.MouseEnter

lblShow.Text = "企鵝走路好可愛"

End Sub

'在企鵝區停留

Private Sub picPenguin_Mousehhover(…..) Handles picPenguin.MouseHover

lblShow.Text = "你看企鵝在表演"

End Sub

'離開企鵝區

Private Sub picPenguin_MouseLeave(…..) Handles picPenguin.MouseLeave

lblShow.Text = "下一站我們要參觀哪一區"

End Sub

'進入魚區

Private Sub picFish_MouseEnter(…..) Handles picFish.MouseEnter

lblShow.Text = "魚在水中游的多自在"

End Sub

'在魚區停留

Private Sub picFish_Mousehhover(…..) Handles picFish.MouseHover

lblShow.Text = "你看有各式各樣的魚"

End Sub

19

Page 20: 第八章滑鼠與鍵盤事件的處理¬¬8章.pdf · 2012/4/29 第十一講次 第八章滑鼠與鍵盤事件的處理 單元目標 1.講解鍵盤事件程序。 2.說明鍵盤事件程序的實例探討。

2012/4/29

'離開魚區

Private Sub picFish_MouseLeave(…..) Handles picFish.MouseLeave

lblShow.Text = "下一站我們要參觀哪一區"

End Sub

'進入青蛙區

Private Sub picFrog_MouseEnter(…..) Handles picFrog.MouseEnter

lblShow.Text = "青蛙跳來跳去真好玩"

End Sub

'在青蛙區停留

Private Sub picFrog_Mousehhover(…..) Handles picFrog.MouseHover

lblShow.Text = "你看青蛙在青蛙跳"

End Sub

'離開青蛙區

Private Sub picFrog_MouseLeave(…..) Handles picFrog.MouseLeave

lblShow.Text = "下一站我們要參觀哪一區"

End Sub

'進入豹區

Private Sub picPanther_MouseEnter(…..) Handles picPanther.MouseEnter

lblShow.Text = "豹的花紋真漂亮"

End Sub

'在豹區停留

Private Sub picPanther_Mousehhover(…..) Handles picPanther.MouseHover

lblShow.Text = "你聽豹的叫聲真可怕"

End Sub

'離開豹區

Private Sub picPanther_MouseLeave(…..) Handles picPanther.MouseLeave

lblShow.Text = "下一站我們要參觀哪一區"

End Sub

'進入瓢蟲

Private Sub picLadybug_MouseEnter(…..) Handles picLadybug.MouseEnter

lblShow.Text = "瓢蟲在樹上一動也不動"

End Sub

'在瓢蟲區停留

Private Sub picLadybug_Mousehhover(…..) Handles picLadybug.MouseHover

lblShow.Text = "你看瓢蟲要飛了"

End Sub

'離開瓢蟲區

Private Sub picLadybug_MouseLeave(…..) Handles picLadybug.MouseLeave

lblShow.Text = "下一站我們要參觀哪一區"

End Sub

'進入駱駝區

Private Sub picCamel_MouseEnter(…..) Handles picCamel.MouseEnter

lblShow.Text = "駱駝的背部好怪"

End Sub

'在貓頭鷹停留

Private Sub picCamel_Mousehhover(…..) Handles picCamel.MouseHover

lblShow.Text = "你能區別單峰駱駝與雙峰駱駝"

End Sub

'離開駱駝區

Private Sub picCamel_MouseLeave(…..) Handles picCamel.MouseLeave

lblShow.Text = "下一站我們要參觀哪一區"

End Sub

'進入貓頭鷹區

Private Sub picOwl_MouseEnter(…..) Handles picOwl.MouseEnter

lblShow.Text = "貓頭鷹在晚上時,眼睛會發光"

20

Page 21: 第八章滑鼠與鍵盤事件的處理¬¬8章.pdf · 2012/4/29 第十一講次 第八章滑鼠與鍵盤事件的處理 單元目標 1.講解鍵盤事件程序。 2.說明鍵盤事件程序的實例探討。

2012/4/29

End Sub

'在貓頭鷹停留

Private Sub piccCamel_Mousehhover(…..) Handles picCamel.MouseHover

lblShow.Text = "你看貓頭鷹眼睛好亮"

End Sub

'離開貓頭鷹區

Private Sub picOwl_MouseLeave(…..) Handles picOwl.MouseLeave

lblShow.Text = "下一站我們要參觀哪一區"

End Sub

重要名詞

鍵盤事件

KeyPress 事件

KeyDown 事件

KeyUp 事件

滑鼠事件

Click 事件

DoubleClick 事件

MouseDown 事件

MouseUp 事件

MouseMove 事件

MouseEnter 事件

MouseLeave 事件

MouseHover 事件

自我評量

1.當使用者按下鍵盤某鍵不放時,會產生 事件,按某一鍵後再放開所按

的鍵時,會產生 事件。

2.當輸入一個字元,則三個事件的發生順序依序為 事件,次為

事件,最後是 事件。

3.當輸入 Enter 鍵時,會產生 (KeyDown 或 KeyPress 或 KeyUp)

事件。

4.當 鍵 入 Ctl 及 A 鍵 時 , 寫 出 所 產 生 鍵 盤 事 件 程 序 的 順 序 ?

21

Page 22: 第八章滑鼠與鍵盤事件的處理¬¬8章.pdf · 2012/4/29 第十一講次 第八章滑鼠與鍵盤事件的處理 單元目標 1.講解鍵盤事件程序。 2.說明鍵盤事件程序的實例探討。

2012/4/29

(1) (2) (3) KeyPress (4) (5) 。

5.在程式中欲偵測按下功能鍵、編輯鍵及組合鍵,會產生 ,

鍵盤事件程序。

6.寫 出 當 按 滑 鼠 左 鈕 一 下 , 會 依 序 產 生 (1) (2) (3) MouseUp 滑 鼠 事 件 程 序 。

7.在 MouseDown 事 件 程 序 的 參 數 中 , 當 按 下 滑 鼠 鈕 時 , 參 數 會 判 斷 所

按 為 何 鈕 ?

8.在 KeyDown 及 KeyUp 事 件 中 參 數 值 判 斷 所 按 鍵 的 內 容 ,

語 法 為 e.KeyCode= 。

9.在 KeyPress 事件程序中, 參數可傳回所按鍵的字元,

參數傳回是否按組合鍵的狀態。

10.在 MouseDown 事 件 程 序 中 , 當 按 下 滑 鼠 左 鈕 時 e.Button 值 =

, 若 按 滑鼠右 鈕被按下 e.Button 值 = , 若 按 滑鼠中鈕被按下

e.Button 值 = 。

11.當 滑鼠游 標 移 動 進 入 物 件 的 範 圍 內 時 會產生 MouseEnter 事 件 , 當 滑 鼠 游

標 離 開 物 件 的 範 圍 內 時 , 會 產 生 MouseLeave事 件 , 當 滑 鼠 游 標 移 動 進 入 物

件 的 範 圍 內 後 , 稍 作 停 留 會 產 生 MouseHover事 件

12.設計一程式,使用滑鼠事件管理資源回收的程式

22

Page 23: 第八章滑鼠與鍵盤事件的處理¬¬8章.pdf · 2012/4/29 第十一講次 第八章滑鼠與鍵盤事件的處理 單元目標 1.講解鍵盤事件程序。 2.說明鍵盤事件程序的實例探討。

2012/4/29

23

13.利 用 滑 鼠 的 幾 個 事 件 完 成 一 個 簡 易 的 繪 圖 程 式 : (A)畫 筆 的 顏 色 為 紅 、 藍 及 綠 三 種 。

(B)可 使 用 捲 軸 控 制 項 改 變 畫 筆 的 粗 細 ,最 小 值 為 1, 最 大 值 為 10。

14.運 用 拖 曳 的 技 巧 , 實 際 拖 曳 圖 形 。

1.將 "老 K"撲 克 牌 拖 曳 至 右 邊 由 標 籤 控 制 項 設 計 之 方 塊 內 。

2.當 "老 K"撲 克 牌 被 拖 曳 時 , 只 要 碰 到 方 塊 周 邊 , 即 可 鬆 開 滑 鼠 鍵 ,

而 使 "老 K"放 置 於 方 塊 內 , 如 右 下 圖 :

3. 若 未 放 置 成 功 , 則 "老 K"自 動 返 回 啟 始 位 置 。