1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2...

26
9 9 第 第第第第第第第第第第第 第 第第第第第第第第第第第 9-1 9-1 第第第第第 第第第第第 9-2 9-2 第第第第 第第第第 9-3 9-3 第第第第 第第第第 9-4 9-4 第第第第 第第第第 9-5 9-5 第第第第第第第 第第第第第第第 9-6 9-6 第第第第第第 第第第第第第

Post on 20-Dec-2015

236 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

11

第第 99 章 視窗應用程式的事件處理章 視窗應用程式的事件處理 9-1 9-1 事件的基礎事件的基礎 9-2 9-2 表單事件表單事件 9-3 9-3 滑鼠事件滑鼠事件 9-4 9-4 鍵盤事件鍵盤事件 9-5 9-5 表單的鍵盤事件表單的鍵盤事件 9-6 9-6 控制項的事件控制項的事件

Page 2: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

22

9-1 9-1 事件的基礎事件的基礎 9-1-1 9-1-1 什麼是事件什麼是事件 9-1-2 9-1-2 建立事件處理程序建立事件處理程序 9-1-3 9-1-3 共用事件處理程序共用事件處理程序

Page 3: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

33

9-1-1 9-1-1 什麼是事件什麼是事件 -- 說明說明 「事件」(「事件」( EventEvent ))是在執行視窗應用程式時,滑鼠、是在執行視窗應用程式時,滑鼠、

鍵盤或表單載入時等操作所觸發的一些動作,例如:鍵盤或表單載入時等操作所觸發的一些動作,例如:如果將應用程式碼視為一輛公共汽車,程式碼的執行如果將應用程式碼視為一輛公共汽車,程式碼的執行就像公車依照行車路線在馬路上行駛,事件就是在行就像公車依照行車路線在馬路上行駛,事件就是在行駛過程中發生的一些需反應的臨時狀況,如下所示:駛過程中發生的一些需反應的臨時狀況,如下所示:• 看到馬路上的紅綠燈。看到馬路上的紅綠燈。• 乘客上車、投幣和下車。乘客上車、投幣和下車。

不論那一路公車,雖然行駛路線不同,但必須不論那一路公車,雖然行駛路線不同,但必須處理的處理的臨時狀況是一樣的臨時狀況是一樣的

Page 4: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

44

9-1-1 9-1-1 什麼是事件什麼是事件 -VB.NET-VB.NET 的事件處理的事件處理 VB.NETVB.NET的的WindowsWindows 應用程式事件處理是一種應用程式事件處理是一種

委託方式的事件處理模型,分為:委託方式的事件處理模型,分為:• 「事件來源」(「事件來源」( Event SourceEvent Source )):引發事件的控制:引發事件的控制

項項• 「傾聽者」(「傾聽者」( ListenerListener )):等候事件發生並處理事件:等候事件發生並處理事件

的物件的物件

按鈕控制項按鈕控制項 Button1Button1 是事件來源,按一下按鈕就會觸發是事件來源,按一下按鈕就會觸發ClickClick 事件,事件, Form1Form1 表單物件的表單物件的 Button1_ClickButton1_Click 就是處就是處理此事件的處理程序,理此事件的處理程序, Form1Form1 就是傾聽者物件。就是傾聽者物件。

Page 5: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

55

9-1-2 9-1-2 建立事件處理程序建立事件處理程序 -- 方法方法 在在 VB.NETVB.NET 建立事件處理程序是在表單和建立事件處理程序是在表單和

控制項建立,有如下控制項建立,有如下 22 種方法:種方法:• 在表單設計工具連按二下控制項建立預設的事在表單設計工具連按二下控制項建立預設的事

件處理程式。件處理程式。• 如果不是預設事件,可以在程式碼編輯視窗選如果不是預設事件,可以在程式碼編輯視窗選

取【類別名稱】的控制項後,在【方法名稱】取【類別名稱】的控制項後,在【方法名稱】選擇指定的事件。選擇指定的事件。

Page 6: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

66

9-1-2 9-1-2 建立事件處理程序建立事件處理程序 -- 預設事預設事件件

控制項種類名稱 預設事件 預設的事件處理程序名稱

表單(Form1) Load Form1_Load

按鈕(Button1) Click Button1_Click

標籤(Label1) Click Label1_Click

文字方塊(TextBox1) TextChanged TextBox1_TextChanged

核取方塊(CheckBox1) CheckedChanged CheckBox1_CheckedChanged

選項按鈕(RadioButton1)

CheckedChanged RadioButton1_CheckedChanged

Page 7: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

77

9-1-2 9-1-2 事件處理程序的參數事件處理程序的參數

VB.NETVB.NET 表單控制項的事件處理程序,如表單控制項的事件處理程序,如下所示:下所示:

Private Sub Label1_DoubleClick(ByVal sender Private Sub Label1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) As Object, ByVal e As System.EventArgs) HandlesHandles Label1.DoubleClickLabel1.DoubleClick

End SubEnd Sub

Page 8: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

88

9-1-2 9-1-2 事件處理程序的參數事件處理程序的參數

參數列擁有參數列擁有 22 個參數,其說明如下:個參數,其說明如下:•參數參數 sendersender::參數是參數是 ObjectObject 資料型別,代資料型別,代

表觸發事件的物件,以此例是標籤表觸發事件的物件,以此例是標籤 LabelLabel 物件 物件 Label1Label1 ,如果是按鈕就是,如果是按鈕就是 ButtonButton 物件、文字物件、文字方塊是方塊是 TextBoxTextBox 物件、核取方塊是物件、核取方塊是CheckBoxCheckBox 和選項鈕是和選項鈕是 RadioButtonRadioButton。。

•參數參數 ee::參數是參數是 EventArgsEventArgs 物件,不同的事物件,不同的事件處理程序,其傳回的物件並不同,這個物件件處理程序,其傳回的物件並不同,這個物件可以取得進一步的事件資訊,例如:觸發事件可以取得進一步的事件資訊,例如:觸發事件時的滑鼠游標位置等。時的滑鼠游標位置等。

Page 9: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

99

9-1-3 9-1-3 共用事件處理程序共用事件處理程序 如果表單上擁有如果表單上擁有 22 個按鈕控制項個按鈕控制項 Button1Button1和和

Button2Button2 ,,依照之前的範例程式,需要分別建立依照之前的範例程式,需要分別建立Button1_ClickButton1_Click和和 Button2_ClickButton2_Click 事件處理程序,事件處理程序,現在我們只需建立現在我們只需建立 Button1_ClickButton1_Click 事件處理程序,事件處理程序,讓它同時處理讓它同時處理 22 個按鈕的個按鈕的 ClickClick 事件,如下所示:事件,如下所示:Private Sub Button1_Click(ByVal sender As _Private Sub Button1_Click(ByVal sender As _

System.Object, ByVal e As System.EventArgs) _System.Object, ByVal e As System.EventArgs) _

Handles Button1.Click, Button2.ClickHandles Button1.Click, Button2.Click

……… ………....

End SubEnd Sub

Page 10: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

1010

9-1-3 9-1-3 共用事件處理程序共用事件處理程序 區分區分 sender sender 之範例程式之範例程式

(1) btnButton = (1) btnButton = CTYPECTYPE(sender, Button)(sender, Button) If btnButton.name = “Button1” ThenIf btnButton.name = “Button1” Then

ElseElse

End ifEnd if(2) btnButton = (2) btnButton = CTYPECTYPE(sender, Button)(sender, Button) If btnButton is Button1 ThenIf btnButton is Button1 Then

ElseElse

End ifEnd if

Page 11: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

1111

9-2 9-2 表單事件表單事件事件 說明

Load 在執行應用程式載入表單時,就會觸發此事件,通常我們會在此事件處理程序指定全域變數的初值或控制項的初始狀態

Resize 當調整視窗尺寸時,就會觸發此事件

Activated 當視窗成為「作用中」視窗時,就會觸發此事件

Deactivate 當視窗成為「非作用中」視窗時,即在其它視窗後方時,就會觸發此事件

Paint 重繪表單內容,通常是使用在繒圖時,詳細的說明請參閱第 11章

Closing 當使用者按下標題列的【X】鈕時,表單在準備關閉前會觸發此事件,我們可以在此事件取消視窗關閉

Closed 在 Closing事件之後,就會觸發此事件

Page 12: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

1212

9-3 9-3 滑鼠事件滑鼠事件事件 說明

MouseEnter 當滑鼠進入控制項時,就會觸發此事件

MouseMove 當滑鼠移動時,就會觸發此事件

MouseDown 當按下滑鼠按鍵時,就會觸發此事件

Click 當滑鼠按一下時,就會觸發此事件

DoubleClick 當滑鼠按二下,即雙擊時,就會觸發此事件

MouseUp 當滑鼠按鍵放開時,就會觸發此事件

MouseLeave 當滑鼠離開控制項時,就會觸發此事件

Page 13: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

1313

9-3-1 9-3-1 ClickClick與與 DoubleClickDoubleClick 事件事件 -- 說明說明

當使用者使用滑鼠在表單或控制項上按一下時,當使用者使用滑鼠在表單或控制項上按一下時,就 會 觸 發就 會 觸 發 ClickClick 事 件 , 連 按 二 下 觸 發事 件 , 連 按 二 下 觸 發DoubleClickDoubleClick 事件。事件。

事 實 上 , 觸 發事 實 上 , 觸 發 ClickClick 事 件 時 會 依 序 觸 發事 件 時 會 依 序 觸 發MouseDownMouseDown 、、 ClickClick 和和 MouseUpMouseUp 事事件 ,件 , DoubleClickDoubleClick 事 件 會 依 序 觸 發事 件 會 依 序 觸 發MouseDownMouseDown 、、 ClickClick 、、 DoubleClickDoubleClick 和和MouseUpMouseUp 事件。事件。

Page 14: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

1414

9-3-1 Click9-3-1 Click 事件的使用事件的使用

ClickClick 事件在事件在 WindowsWindows 應用程式表單和控制項的應用程式表單和控制項的使用時機,如下所示:使用時機,如下所示:

• 按下按鈕執行程式碼。按下按鈕執行程式碼。• 在選項按鈕或核取方塊選取或勾選選項。在選項按鈕或核取方塊選取或勾選選項。• 將標籤控制項模擬成按鈕控制項按下的功能。將標籤控制項模擬成按鈕控制項按下的功能。

Page 15: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

1515

9-3-1 9-3-1 DoubleClickDoubleClick 事件的使用事件的使用

DoubleClickDoubleClick 事件在事件在 WindowsWindows 應用程式表單使應用程式表單使用的機會並不多,只有表單、標籤和文字方塊支用的機會並不多,只有表單、標籤和文字方塊支援援 DoubleClickDoubleClick 事件,第事件,第 1010 章 章 (10-6) (10-6) 的的清單清單方 塊 和 下 拉 式 清 單 方 塊 控 制 項 也 提 供方 塊 和 下 拉 式 清 單 方 塊 控 制 項 也 提 供DoubleClickDoubleClick 事件。事件。

Page 16: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

1616

9-3-2 9-3-2 MouseUpMouseUp、、 MouseDownMouseDown 事件事件 --說明說明

MousUpMousUp和和 MouseDownMouseDown 事件是在使用者事件是在使用者按下滑鼠按鍵和放開時產生的事件,程式按下滑鼠按鍵和放開時產生的事件,程式碼可以從事件處理程序的參數碼可以從事件處理程序的參數 ee 的的MouseEventArgsMouseEventArgs 物件取得使用者是按下物件取得使用者是按下了那一個按鈕了那一個按鈕。。

Page 17: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

1717

9-3-2 9-3-2 MouseEventArgsMouseEventArgs 物件屬性物件屬性

屬性 說明

Button 其 值 是 使 用 者 按 下 滑 鼠 的 那 一 個 按 鍵 , 這 是MouseButtons列舉常數,如下所示:

MouseButtons.Left:左鍵

MouseButtons.Middle:中鍵

MouseButtons.Right:右鍵

X 滑鼠游標位置的 X座標

Y 滑鼠游標位置的 Y座標

如果按在控制項上,表示相對於控制項左上角之座標

如果沒有按在控制項上,表示相對於表單左上角之座標

Page 18: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

1818

9-3-3 9-3-3 MouseEnter、MouseMove、MouseLeav

e 事件事件 MouseEnterMouseEnter、、 MouseLeaveMouseLeave 事件是在進事件是在進

入控制項和離開控制項時產生的事件,我入控制項和離開控制項時產生的事件,我們可以使用這兩個事件建立控制項的動畫們可以使用這兩個事件建立控制項的動畫效果,例如:進入控制項時,背景色彩為效果,例如:進入控制項時,背景色彩為紅色,離開時控制項變成綠色。紅色,離開時控制項變成綠色。

MouseMoveMouseMove 事件是在滑鼠移動時產生的事件是在滑鼠移動時產生的一系列事件,在程式中只需使用此事件,一系列事件,在程式中只需使用此事件,就可以建立滑鼠拖拉控制項的效果。其預就可以建立滑鼠拖拉控制項的效果。其預設參數設參數 ee 為為 MouseEventArgsMouseEventArgs 物件。物件。

Page 19: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

1919

9-3-3 9-3-3 MouseEnterMouseEnter、、 MouseMoveMouseMove、、 MouMou

seLeaveseLeave 事件事件 -- 屬性屬性屬性 說明

Top 設定或取得控制項上邊緣和其容器上(即表單)邊緣之間的距離,即控制項左上角的 Y座標

Left 設定或取得控制項內部左邊緣和其容器左邊緣之間的距離,即控制項左上角的 X座標

Width 控制項的寬度

Height 控制項的高度

Page 20: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

2020

9-4 9-4 鍵盤事件鍵盤事件

事件 說明

KeyDown 當使用者在控制項擁有焦點時,按下按鍵時產生的事件

KeyPress 當使用者按下和釋放 ANSI字碼的按鍵時產生此事件,可以取得輸入的字元

KeyUp 當使用者在控制項擁有焦點時,放開按鍵時產生的事件

Page 21: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

2121

9-4-1 9-4-1 KeyUpKeyUp和和 KeyDownKeyDown 事件事件 KeyEventArgsKeyEventArgs 物件屬性來取得按下那一個按鍵,物件屬性來取得按下那一個按鍵,

其相關屬性,如下表所示:其相關屬性,如下表所示:屬性 說明

KeyCode 取得按下按鍵的「按鍵碼」(Key Code),它是一個整數值,可以使用 Keys 列舉常數,例如:方向鍵分別為 Keys.Up、Keys.Down、Keys.Right和 Keys.Left

Control 檢查是否按下 Ctrl鍵,這是布林值,True為按下,False為沒有按下

Alt 檢查是否按下 Alt 鍵,這是布林值,True 為按下,False 為沒有按下

Shift 檢查是否按下 Shift 鍵,這是布林值,True 為按下,False 為沒有按下

Page 22: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

2222

9-4-2 9-4-2 KeyPressKeyPress 事件事件 KeyPressKeyPress 事件是在事件是在 KeyDownKeyDown 事件之後和事件之後和

KeyUpKeyUp 事件之前觸發,可以取得按鍵的事件之前觸發,可以取得按鍵的 ASCIIASCII 字字元碼,事件處理程序傳入的參數是元碼,事件處理程序傳入的參數是KeyPressEventArgsKeyPressEventArgs 物件,其相關屬性如下表物件,其相關屬性如下表所示:所示:屬性 說明

KeyChar 傳回使用者按下按鍵的字元

Handled 設定是否忽略使用者按鍵,此為布林值,預設值 False 表示不忽略,True為忽略

Page 23: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

2323

9-5 9-5 表單的鍵盤事件表單的鍵盤事件 如果希望表單能夠作為回應鍵盤事件的物如果希望表單能夠作為回應鍵盤事件的物

件,我們需要設定表單的件,我們需要設定表單的 KeyPreviewKeyPreview 屬屬性,如下表所示:性,如下表所示:

屬性 說明

KeyPreview 是否開啟觸發鍵盤事件,預設值 False 表示沒有開啟,True為開啟

Page 24: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

2424

9-6 9-6 控制項的事件控制項的事件 9-6-1 9-6-1 文字方塊控制項的文字方塊控制項的 TextChangedTextChanged 事事

件件 9-6-2 9-6-2 核取方塊與選項按鈕的核取方塊與選項按鈕的

CheckedChangedCheckedChanged 事件事件

Page 25: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

2525

9-6-1 9-6-1 文字方塊控制項的文字方塊控制項的TextChangedTextChanged 事件事件

文字方塊控制項文字方塊控制項 TextChangedTextChanged 事件觸發事件觸發的 過 程 是 在 輸 入 文 字 內 容 時 , 在的 過 程 是 在 輸 入 文 字 內 容 時 , 在KeyDownKeyDown 、、 KeyPressKeyPress 事 件 後 觸 發 此事 件 後 觸 發 此TexChangedTexChanged 事件,最後是事件,最後是 KeyUpKeyUp 事件,事件,事件的說明如下表所示:事件的說明如下表所示:事件 說明

TextChanged 當文字控制項的內容有變更時,就會觸發此事件

Page 26: 1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件

2626

9-6-2 9-6-2 核取方塊與選項按鈕的核取方塊與選項按鈕的CheckedChangedCheckedChanged 事件事件

核 取 方 塊 與 選 項 按 鈕 都 擁 有核 取 方 塊 與 選 項 按 鈕 都 擁 有CheckedChangedCheckedChanged 事件,其說明如下表事件,其說明如下表所示:所示:事件 說明

CheckedChanged 當 Checked屬性變更時,觸發此事件