1 / 19

第十五章 事件

第十五章 事件. 1 5 -1 KeyPress 1 5 -2 KeyDown 及 KeyUp 1 5 -3 MouseDown 、 MouseUp 及 MouseMove 習題.

tate-carver
Download Presentation

第十五章 事件

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第十五章 事件 • 1 5 -1 KeyPress • 1 5 -2 KeyDown 及KeyUp • 1 5 -3 MouseDown 、MouseUp 及MouseMove • 習題

  2. 傳統的程式設計, 程式是從頭到尾依序執行, 現在的程式語言則都是事件驅動。所謂事件驅動, 是程式完成初值設定之後, 不斷的等待使用者的觸發, 觸發的來源包羅萬象, 有可能滑鼠被按一下、有可能輸入值已改變、有可能鍵盤被按一下等事件。因為事件驅動較符合使用者的習慣, 且可以減輕程式設計者的負擔, 所以已成為程式語言的主流。在本章之前, 本書常用的事件為表單的Load 、及滑鼠的Click 事件等, 本章的重點則是集中介紹一些鍵盤的KeyPress 、KeyDown 及KeyUP 事件、滑鼠的MouseDown 、MouseUP 及MouseMove 等事件。學習本章之後, 將有助於提昇電玩控制、影像繪圖等軟體的靈活度。

  3. 1 5 -1 KeyPress • 當使用者按一下鍵盤的一般字元倒退鍵及Enter鍵等具有ASCII 碼的鍵時, 都會產生KeyPress 事件, 電腦並傳回按鍵的字元。KeyPress 事件的語法如下: private void 物件名稱_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) • 在以上語法中, 第一個參數Sender 是指觸發事件的物件; 第二個參數是一個KeyPressEventArgs 類別的物件, 透過此物件可取得使用者按下的鍵盤資訊, 其常用的屬性如下: • KeyChar 取得使用者所按下的字元。例如, 以下敘述可取得使用者所按下的字元。 private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) { label1.Text = e.KeyChar.ToString(); }

  4. 範例15-1a • 示範KeyPress 事件的用法。

  5. 1 5 -2 KeyDown 及KeyUp • 上一節的KeyPress 事件僅能傳回一般字元、倒退鍵及Enter鍵, 對於一些功能鍵、移位鍵及按鍵的同時是否按下Shift、Ctrl及Alt鍵則沒有反應。若要偵測以上特殊鍵功能, 或深入研究到底是鍵盤按下去、或彈上來的特殊時點, 則可使用本節的KeyDown 及KeyUp, KeyDown 與KeyUp 的語法完全相同, 如下所示: / /Ke yDown private void 物件名稱_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) / /Ke yUp private void 物件名稱_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e) • 以上語法中第二個參數是一個KeyEventArgs 類別的物件, 透過此物件可取得比KeyPress 事件更多的鍵盤資訊, 藉此作更複雜的鍵盤控制。KeyEventArgs 類別常用的屬性介紹如下:

  6. KeyCode • 取得KeyDown 或KeyUp 事件的按鍵碼。例如, 以下敘述可取得使用者所按下的按鍵碼。 private void txt1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { lblKeyCode.Text = e.KeyCode.ToString(); } • 此外, KeyCode 屬性所回傳的按鍵碼是屬於Keys 列舉型別的成員, 若讀者需要判斷使用者是否按下特定鍵時, 可用KeyCode 屬性與Keys 型別的成員作比較。例如, 以下敘述可判斷使用者是否按下左移位鍵。 private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { if (e.KeyCode == Keys.Left) { . . . // 欲處理之程式碼 } }

  7. KeyData • KeyData 屬性也是取得KeyDown 或KeyUp 事件的按鍵碼, 但其和KeyCode屬性不同之處在於---- Keycode 屬性僅能取得單一按鍵碼, 但KeyData 可取得組合鍵的按鍵碼。例如當使用者按下Ctrl+C 鍵時, KeyCode 屬性僅會傳回按鍵碼"C", 但KeyData 則會傳回按鍵碼"C, Shift" 。例如, 以下敘述可取得使用者所按下的組合按鍵碼。 private void txt1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { lblKeyData.Text = e.KeyData.ToString(); }

  8. KeyValue • 取得KeyDown 或KeyUp 事件以整數表示的按鍵值。例如, 當使用者按下C鍵時, 其傳回值為67 。以下敘述是其使用的方法。 private void txt1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { lblKeyValue.Text = e.KeyValue.ToString(); }

  9. Alt • 判斷按鍵的同時, 是否也按下了Alt鍵, 如果有則傳回True, 否則傳回False 。例如, 以下敘述得知使用者是否按了Alt鍵。 private void txt1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { lblAlt.Text = e.Alt.ToString(); }

  10. Control • 判斷按鍵的同時, 是否也按下了Ctrl鍵。例如, 以下敘述可得知使用者是否按了Ctrl鍵。 private void txt1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { lblControl.Text = e.Control.ToString(); }

  11. Shift • 判斷按鍵的同時, 是否也按下了ShiftShift鍵。例如, 以下敘述可得知使用者是否按了鍵。 private void txt1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { lblShift.Text = e.Shift.ToString(); }

  12. 範例15-2a • 示範KeyDown 事件。

  13. 範例15-2b • 同範例14-8b, 請用鍵盤的←、→、↑、↓鍵移動照片, Page up、Page down鍵改變照片的大小。

  14. 1 5 -3 MouseDown 、MouseUp 及MouseMove • 滑鼠最常用的事件為Click 與DoubleClick, 若要進一步得知滑鼠的何鍵被按及按鍵的滑鼠指標座標, 則應使用本節的MouseDown 、MouseUp 及MouseMove, 其中MouseDown 是任意滑鼠鍵被按均產生此事件, MouseUp 則是產生於滑鼠任意鍵被按下去且彈上來時, MouseMove 則只要使用者在某物件上方移動時, 該物件即產生MouseMove 事件, 以上三事件語法如下: private void 物件名稱_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) private void 物件名稱_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) private void 物件名稱_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) • 以上語法中第二個參數是一個MouseEventArgs 類別的物件, 此物件可取得以上三事件的滑鼠資訊, 其常用的屬性介紹如下:

  15. Button 屬性 • 取得使用者按下哪個滑鼠鍵。此屬性可傳回一個MouseButtons 列舉型別的成員, 其成員如下表:

  16. 例如, 以下敘述可取得使用者所按下滑鼠鍵的資訊。 private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { lblButton.Text = e.Button.ToString(); } • X 與Y 屬性對於MouseDown 與MouseUp 事件, 其傳回滑鼠鍵被按下或放開時的X 、Y 座標位置; 對於MouseMove 事件則是傳回滑鼠指標目前所在之處的X 、Y 座標。例如, 以下敘述若置於MouseDown 事件中, 可取得滑鼠鍵被按下時的X、Y 座標。 private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { lblXY.Text = e.X.ToString() + ", " + e.Y.ToString(); }

  17. 範例15-3a • 示範MouseDown 與MouseMove 事件。

  18. 範例15-3b • 寫一程式, 可以讓使用者按住滑鼠左鍵畫線, 按住滑鼠右鍵可擦拭所畫圖形。

  19. 習題 • 1. 請設計一個3 x 3 的智慧方塊, 使用者可將依亂數排列的小方塊重新排列。 • 2. 請設計一個踩影子遊戲, 遊戲規則如下: • 使用者用鍵盤的上、下、左、右鍵及加速鍵操控螢幕的鐵錘, • 錘打依亂數自由移動的笑臉圖案, • 當鐵錘打到笑臉時印出使用者按鍵次數及使用時間。

More Related