第 9 章 視窗應用程式的事件處理

29
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 第第第第第第 第第第第第第

Upload: misha

Post on 24-Jan-2016

48 views

Category:

Documents


0 download

DESCRIPTION

第 9 章 視窗應用程式的事件處理. 9-1 事件的基礎 9-2 表單事件 9-3 滑鼠事件 9-4 鍵盤事件 9-5 表單的鍵盤事件 9-6 控制項的事件. 9-1 事件的基礎. 9-1-1 什麼是事件 9-1-2 建立事件處理程序 9-1-3 共用事件處理程序. 9-1-1 什麼是事件 - 說明. 「事件」( Event )是在執行視窗應用程式時,滑鼠、鍵盤或表單載入時等操作所觸發的一些動作。 例如:將應用程式視為一輛公共汽車,公車依照行車路線在馬路上行駛,事件是在行駛過程中發生的一些動作,如下所示: 看到馬路上的紅綠燈。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 9 章  視窗應用程式的事件處理

第第 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: 第 9 章  視窗應用程式的事件處理

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

Page 3: 第 9 章  視窗應用程式的事件處理

9-1-1 9-1-1 什麼是事件什麼是事件 -- 說明說明 「事件」(「事件」( EventEvent )是在執行視窗應用程)是在執行視窗應用程

式時,滑鼠、鍵盤或表單載入時等操作所式時,滑鼠、鍵盤或表單載入時等操作所觸發的一些動作。觸發的一些動作。

例如:將應用程式視為一輛公共汽車,公例如:將應用程式視為一輛公共汽車,公車依照行車路線在馬路上行駛,事件是在車依照行車路線在馬路上行駛,事件是在行駛過程中發生的一些動作,如下所示:行駛過程中發生的一些動作,如下所示:• 看到馬路上的紅綠燈。看到馬路上的紅綠燈。• 乘客上車、投幣和下車。乘客上車、投幣和下車。

例如:看到站牌有乘客準備上車時,乘客例如:看到站牌有乘客準備上車時,乘客上車的事件就觸發,司機知道需要路邊停上車的事件就觸發,司機知道需要路邊停車和開啟車門。車和開啟車門。

Page 4: 第 9 章  視窗應用程式的事件處理

9-1-1 9-1-1 什麼是事件什麼是事件 -- 圖例圖例 回到本章主題,回到本章主題, Visual BasicVisual Basic 視窗應用程視窗應用程

式的事件處理是一種於委託事件處理模型,式的事件處理是一種於委託事件處理模型,分為「事件來源」(分為「事件來源」( Event SourceEvent Source )引)引發事件的控制項和處理事件的「傾聽者」發事件的控制項和處理事件的「傾聽者」(( ListenerListener ),如下圖所示:),如下圖所示:

Page 5: 第 9 章  視窗應用程式的事件處理

在表單和控制項建立事件處理程序的方法,在表單和控制項建立事件處理程序的方法,如下所示:如下所示:• 在表單設計視窗按二下控制項來建立預設的事在表單設計視窗按二下控制項來建立預設的事

件處理程式。件處理程式。• 如果不是預設事件,可以在程式碼編輯視窗選如果不是預設事件,可以在程式碼編輯視窗選取取【【類別名稱類別名稱】】的控制項後,在的控制項後,在【【方法名稱方法名稱】】選擇指定的事件。選擇指定的事件。

9-1-2 9-1-2 建立事件處理程序建立事件處理程序 -- 方法方法

Page 6: 第 9 章  視窗應用程式的事件處理

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: 第 9 章  視窗應用程式的事件處理

9-1-3 9-1-3 共用事件處理程序共用事件處理程序 -- 說明說明 WindowsWindows 應用程式的多個控制項可以共用應用程式的多個控制項可以共用

同一個事件處理程序,如果控制項的處理同一個事件處理程序,如果控制項的處理程序內容都大同小異,我們可以建立共用程序內容都大同小異,我們可以建立共用的事件處理程序,用來處理不同控制項所的事件處理程序,用來處理不同控制項所產生的事件。產生的事件。

Page 8: 第 9 章  視窗應用程式的事件處理

9-1-3 9-1-3 共用事件處理程序共用事件處理程序 -- 範例範例 例如:在表單上擁有例如:在表單上擁有 Button1Button1和和 Button2Button2 按鈕按鈕

控制項,依照之前的範例程式,我們需要建立控制項,依照之前的範例程式,我們需要建立Button1_Click()Button1_Click()和和 Button2_Click()Button2_Click() 事件處理事件處理程序。程序。

事實上,我們可以只建立事實上,我們可以只建立 Button1_Click()Button1_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 9: 第 9 章  視窗應用程式的事件處理

9-2 9-2 表單事件表單事件 -- 說明說明 Visual BasicVisual Basic 建立的建立的 WindowsWindows 應用程式應用程式

是由表單物件所組成,當應用程式載入表是由表單物件所組成,當應用程式載入表單時,即會觸發一系列表單事件。單時,即會觸發一系列表單事件。

事實上,載入表單、調整視窗尺寸和關閉事實上,載入表單、調整視窗尺寸和關閉表單的過程,都會觸發一系列事件。表單的過程,都會觸發一系列事件。

Page 10: 第 9 章  視窗應用程式的事件處理

9-2 9-2 表單事件表單事件 -- 常用事件常用事件 常用的表單事件,如下表所示:常用的表單事件,如下表所示:事件 說明Load 在執行應用程式載入表單時,就會觸發此事件,通常我們會在

此事件的處理程序,指定全域變數的初值或控制項的初始狀態Resize 當調整視窗尺寸時,就會觸發此事件

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

觸發此事件Paint 重繪表單內容,通常是使用在繪圖時,詳細說明請參閱第 11

章FormClosing 當使用者按下標題列的【X】鈕時,表單在準備關閉前會觸發

此事件,我們可以在此事件取消視窗關閉FormClosed 在 FormClosing事件之後,就會觸發此事件

Page 11: 第 9 章  視窗應用程式的事件處理

9-3 9-3 滑鼠事件滑鼠事件 9-3-1 Click9-3-1 Click與與 DoubleClickDoubleClick 事件事件 9-3-2 MouseUp9-3-2 MouseUp和和 MouseDownMouseDown 事件事件 9-3-3 MouseEnter9-3-3 MouseEnter、、 MouseMoveMouseMove和和

MouseLeaveMouseLeave 事件事件

Page 12: 第 9 章  視窗應用程式的事件處理

9-3 9-3 滑鼠事件滑鼠事件 滑鼠事件是在表單或控制項上操作滑鼠時,移動、滑鼠事件是在表單或控制項上操作滑鼠時,移動、

按一下和按二下等操作所觸發的一系列事件,如按一下和按二下等操作所觸發的一系列事件,如下表所示:下表所示:事件 說明

MouseEnter 當滑鼠進入控制項時,就會觸發此事件MouseMove 當滑鼠移動時,就會觸發此事件MouseDown 當按下滑鼠按鍵時,就會觸發此事件

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

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

Page 13: 第 9 章  視窗應用程式的事件處理

9-3-1 Click9-3-1 Click與與 DoubleClickDoubleClick 事件事件 -- 說說明明

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

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

Page 14: 第 9 章  視窗應用程式的事件處理

9-3-1 Click9-3-1 Click與與 DoubleClickDoubleClick 事件事件 -- 使使用用 ClickClick 事件事件

在在WindowsWindows 應用程式表單和控制項使用應用程式表單和控制項使用ClickClick 事件的時機,如下所示:事件的時機,如下所示:• 按下按鈕執行程式碼,在本章前的範例程式都按下按鈕執行程式碼,在本章前的範例程式都

是使用是使用 ClickClick 事件。事件。• 在選項按鈕或核取方塊選取或勾選選項。在選項按鈕或核取方塊選取或勾選選項。• 將標籤控制項模擬成按鈕控制項按下的功能。將標籤控制項模擬成按鈕控制項按下的功能。

Page 15: 第 9 章  視窗應用程式的事件處理

9-3-1 Click9-3-1 Click與與 DoubleClickDoubleClick 事件事件 -- 使使用用 DoubleClickDoubleClick 事件事件

DoubleClickDoubleClick 事件在表單控制項使用的機事件在表單控制項使用的機會並不多,以目前說明的控制項來說,只會並不多,以目前說明的控制項來說,只有表單、標籤和文字方塊支援有表單、標籤和文字方塊支援DoubleClickDoubleClick 事件,第事件,第 1010 章的清單方塊和章的清單方塊和下拉式清單方塊控制項也支援下拉式清單方塊控制項也支援DoubleClickDoubleClick 事件。事件。

Page 16: 第 9 章  視窗應用程式的事件處理

9-3-2 MouseUp9-3-2 MouseUp和和 MouseDownMouseDown 事事件件

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

物件常用的屬性,如下表所示:物件常用的屬性,如下表所示:屬性 說明

Button 其值是使用者按下滑鼠的哪一個按鍵,它是MouseButtons列舉常數,MouseButtons.Left是左鍵、MouseButtons.Middle是中鍵,

和MouseButtons.Right是右鍵X 滑鼠游標位置的 X座標Y 滑鼠游標位置的 Y座標

Page 17: 第 9 章  視窗應用程式的事件處理

9-3-3 MouseEnter9-3-3 MouseEnter、、 MouseMoveMouseMove和和 MouseLeaveMouseLeave 事件事件 -- 說明說明

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

MouseMoveMouseMove 事件是在滑鼠移動時產生的事件是在滑鼠移動時產生的一系列事件,在程式中只需使用此事件,一系列事件,在程式中只需使用此事件,就可以建立滑鼠拖拉控制項的效果,因為就可以建立滑鼠拖拉控制項的效果,因為需要調整控制項位置,換句話說,我們需需要調整控制項位置,換句話說,我們需要在程式碼取得控制項的座標和尺寸。要在程式碼取得控制項的座標和尺寸。

Page 18: 第 9 章  視窗應用程式的事件處理

9-3-3 MouseEnter9-3-3 MouseEnter、、 MouseMoveMouseMove和和 MouseLeaveMouseLeave 事件事件 -- 屬性屬性

其相關屬性如下表所示:其相關屬性如下表所示:屬性 說明Top 設定或取得控制項上邊緣和其容器上(即表單)邊緣之間的距離,

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

項左上角的 X座標Width 控制項的寬度Height 控制項的高度

Page 19: 第 9 章  視窗應用程式的事件處理

9-4 9-4 鍵盤事件鍵盤事件 9-4-1 KeyDown9-4-1 KeyDown和和 KeyUpKeyUp 事件事件 9-4-2 KeyPress9-4-2 KeyPress 事件事件

Page 20: 第 9 章  視窗應用程式的事件處理

9-4 9-4 鍵盤事件鍵盤事件 當在文字方塊控制項輸入文字內容時,控當在文字方塊控制項輸入文字內容時,控

制項會觸發一系列鍵盤事件,如下表所示:制項會觸發一系列鍵盤事件,如下表所示:

事件 說明KeyDown 當使用者在控制項擁有焦點時,按下按鍵時產生的事件KeyPress 當使用者按下和釋放 ANSI字碼的按鍵時產生此事件,可以取

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

Page 21: 第 9 章  視窗應用程式的事件處理

9-4-1 KeyDown9-4-1 KeyDown和和 KeyUpKeyUp 事件事件 KeyDownKeyDown和和 KeyUpKeyUp 事件處理程序是依參事件處理程序是依參

數的數的 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: 第 9 章  視窗應用程式的事件處理

9-4-2 KeyPress9-4-2 KeyPress 事件事件 KeyPressKeyPress 事件是在事件是在 KeyDownKeyDown 事件之後事件之後和和 KeyUpKeyUp 事件之前觸發,可以使用函數來事件之前觸發,可以使用函數來取得按鍵的取得按鍵的 ASCIIASCII 碼,在事件處理程序傳碼,在事件處理程序傳入的參數是入的參數是 KeyPressEventArgsKeyPressEventArgs 物件,物件,其相關屬性如下表所示:其相關屬性如下表所示:屬性 說明

KeyChar 傳回使用者按下按鍵的字元Handled 設定是否忽略使用者按鍵,預設值 False表示不忽略,True為忽

Page 23: 第 9 章  視窗應用程式的事件處理

KeyPressKeyPress 事件事件 在事件程序內使用在事件程序內使用 e.KeyChare.KeyChar 取回按鍵值取回按鍵值

• EX: EX: • If e.KeyChar=Microsoft.VisualBasic.ChrW(Keys.Return) ThenIf e.KeyChar=Microsoft.VisualBasic.ChrW(Keys.Return) Then• If e.KeyChar <“0” Or e.KeyChar>”9” ThenIf e.KeyChar <“0” Or e.KeyChar>”9” Then• If e.KeyChar=vbBack Then ‘If e.KeyChar=vbBack Then ‘ 按下按下 BackSpaceBackSpace• e.Handled=True e.Handled=True 設定按健不置入 設定按健不置入 TextBoxTextBox 控制項控制項

常用按鍵常用按鍵• Ctrl+A Ctrl+A 至 至 Ctrl+Z (1Ctrl+Z (1至至 26)26)• Enter (13), Ctrl+Enter (10)Enter (13), Ctrl+Enter (10)• Backspace (8), Ctrl+BackSpace (127)Backspace (8), Ctrl+BackSpace (127)• CapsLock (20)CapsLock (20)• WindowsWindows 功能鍵 功能鍵 (91) Apps (93)(91) Apps (93)• Space (32)Space (32)

Page 24: 第 9 章  視窗應用程式的事件處理

KeyPressKeyPress 事件事件• e.Alt : e.Alt : 判段是否按下 判段是否按下 Alt Alt • e.Shift : e.Shift : 判段是否按下 判段是否按下 Shif Shif • e.Control : e.Control : 判段是否按下 判段是否按下 Control Control • e.Alt : e.Alt : 判段是否按下 判段是否按下 Alt Alt • e.KeyCode e.KeyCode 取得 取得 ASCIIASCII 編碼編碼• e.KeyCode.ToString : e.KeyCode.ToString : 取得按鍵字碼取得按鍵字碼• 鍵盤九宮格鍵盤九宮格 ::

• Home: 36 Home: 36 ↑↑:38:38 PgUp: 33PgUp: 33

• ←← :37 5: 12 :37 5: 12 →→: 39: 39

• End :35 End :35 ↓↓:40 PgDn: 34:40 PgDn: 34

• F1(112) F2 (113) …F12 (123)F1(112) F2 (113) …F12 (123)

Page 25: 第 9 章  視窗應用程式的事件處理

9-5 9-5 表單的鍵盤事件表單的鍵盤事件 -- 啟用啟用 Visual BasicVisual Basic 表單在預設情況下,為了避表單在預設情況下,為了避

免影響執行效率,並不會觸發鍵盤事件,免影響執行效率,並不會觸發鍵盤事件,所以上一節範例程式都是使用所以上一節範例程式都是使用 TextBoxTextBox 文文字方塊控制項來觸發鍵盤事件。字方塊控制項來觸發鍵盤事件。

表單如果需要作為回應鍵盤事件的傾聽者表單如果需要作為回應鍵盤事件的傾聽者物件,請設定表單的物件,請設定表單的 KeyPreviewKeyPreview 屬性為屬性為TrueTrue ,如下表所示:,如下表所示:屬性 說明

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

Page 26: 第 9 章  視窗應用程式的事件處理

9-5 9-5 表單的鍵盤事件表單的鍵盤事件 -Split()-Split() 函數函數 Visual BasicVisual Basic的的 Split()Split() 函數可以將字串以指定分函數可以將字串以指定分隔字串切割成字串陣列,如下所示:隔字串切割成字串陣列,如下所示:

Dim str As String = "This/is/a/book."Dim str As String = "This/is/a/book."

Dim arrString() As String = Split(str, "/")Dim arrString() As String = Split(str, "/") 上述程式碼傳回以第上述程式碼傳回以第 22 個參數個參數 "/""/" 來分割第來分割第 11 個個

參數成為字串陣列,其執行結果相當於宣告字串參數成為字串陣列,其執行結果相當於宣告字串陣列,如下所示:陣列,如下所示:

Dim arrString() As String = _Dim arrString() As String = _

{"This", "is", "a", "book."}{"This", "is", "a", "book."}

Page 27: 第 9 章  視窗應用程式的事件處理

9-6 9-6 控制項的事件控制項的事件 9-6-1 9-6-1 文字方塊控制項的文字方塊控制項的 TextChangedTextChanged 事件事件 9-6-2 9-6-2 核取方塊與選項按鈕的核取方塊與選項按鈕的 CheckedChangedCheckedChanged 事件事件

Page 28: 第 9 章  視窗應用程式的事件處理

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

文字方塊控制項的文字方塊控制項的 TextChangedTextChanged 事件是事件是輸入文字過程觸發的事件。它是在輸入文字過程觸發的事件。它是在KeyDownKeyDown、、 KeyPressKeyPress 事件後觸發事件後觸發TextChangedTextChanged 事件,最後是事件,最後是 KeyUpKeyUp 事件。事件。TextChangedTextChanged 事件可以建立動態資料變更,事件可以建立動態資料變更,我們可以在輸入資料後,就馬上輸出輸入我們可以在輸入資料後,就馬上輸出輸入的內容。事件說明如下表所示:的內容。事件說明如下表所示:事件 說明

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

Page 29: 第 9 章  視窗應用程式的事件處理

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

核取方塊與選項按鈕擁有核取方塊與選項按鈕擁有CheckedChangedCheckedChanged 事件,可以建立動態事件,可以建立動態選項的選取,例如:在之前點餐系統,只選項的選取,例如:在之前點餐系統,只需配合需配合 CheckedChangedCheckedChanged 事件,就可以事件,就可以在選取餐點後,馬上計算目前的總金額。在選取餐點後,馬上計算目前的總金額。其說明如下表所示:其說明如下表所示:事件 說明

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