第 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 控制項的事件
9-1 事件的基礎 什麼是事件 什麼是事件 建立事件處理程序 建立事件處理程序 共用事件處理程序 共用事件處理程序
9-1-1 什麼是事件 - 說明 「事件」( Event )是在執行視窗應用程式 時,滑鼠、鍵盤或表單載入時等操作所觸 發的一些動作。 「事件」( Event )是在執行視窗應用程式 時,滑鼠、鍵盤或表單載入時等操作所觸 發的一些動作。 例如:將應用程式視為一輛公共汽車,公 車依照行車路線在馬路上行駛,事件是在 行駛過程中發生的一些動作,如下所示: 例如:將應用程式視為一輛公共汽車,公 車依照行車路線在馬路上行駛,事件是在 行駛過程中發生的一些動作,如下所示: 看到馬路上的紅綠燈。 看到馬路上的紅綠燈。 乘客上車、投幣和下車。 乘客上車、投幣和下車。 例如:看到站牌有乘客準備上車時,乘客 上車的事件就觸發,司機知道需要路邊停 車和開啟車門。 例如:看到站牌有乘客準備上車時,乘客 上車的事件就觸發,司機知道需要路邊停 車和開啟車門。
9-1-1 什麼是事件 - 圖例 回到本章主題, Visual Basic 視窗應用程式 的事件處理是一種於委託事件處理模型, 分為「事件來源」( Event Source )引發 事件的控制項和處理事件的「傾聽者」 ( Listener ),如下圖所示: 回到本章主題, Visual Basic 視窗應用程式 的事件處理是一種於委託事件處理模型, 分為「事件來源」( Event Source )引發 事件的控制項和處理事件的「傾聽者」 ( Listener ),如下圖所示:
在表單和控制項建立事件處理程序的方法, 如下所示: 在表單和控制項建立事件處理程序的方法, 如下所示: 在表單設計視窗按二下控制項來建立預設的事 件處理程式。 在表單設計視窗按二下控制項來建立預設的事 件處理程式。 如果不是預設事件,可以在程式碼編輯視窗選 取【類別名稱】的控制項後,在【方法名稱】 選擇指定的事件。 如果不是預設事件,可以在程式碼編輯視窗選 取【類別名稱】的控制項後,在【方法名稱】 選擇指定的事件。 建立事件處理程序 - 方法
9-1-2 建立事件處理程序 - 預設事件 表單和控制項預設的事件處理程序,如下 表所示: 表單和控制項預設的事件處理程序,如下 表所示:
9-1-3 共用事件處理程序 - 說明 Windows 應用程式的多個控制項可以共用 同一個事件處理程序,如果控制項的處理 程序內容都大同小異,我們可以建立共用 的事件處理程序,用來處理不同控制項所 產生的事件。 Windows 應用程式的多個控制項可以共用 同一個事件處理程序,如果控制項的處理 程序內容都大同小異,我們可以建立共用 的事件處理程序,用來處理不同控制項所 產生的事件。
9-1-3 共用事件處理程序 - 範例 例如:在表單上擁有 Button1 和 Button2 按鈕控 制項,依照之前的範例程式,我們需要建立 Button1_Click() 和 Button2_Click() 事件處理 程序。 例如:在表單上擁有 Button1 和 Button2 按鈕控 制項,依照之前的範例程式,我們需要建立 Button1_Click() 和 Button2_Click() 事件處理 程序。 事實上,我們可以只建立 Button1_Click() 事件 處理程序,讓它同時處理 2 個按鈕的 Click 事件, 如下所示: 事實上,我們可以只建立 Button1_Click() 事件 處理程序,讓它同時處理 2 個按鈕的 Click 事件, 如下所示: 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.Click Handles Button1.Click, Button2.Click ……….. ……….. End Sub
9-2 表單事件 - 說明 Visual Basic 建立的 Windows 應用程式是 由表單物件所組成,當應用程式載入表單 時,即會觸發一系列表單事件。 Visual Basic 建立的 Windows 應用程式是 由表單物件所組成,當應用程式載入表單 時,即會觸發一系列表單事件。 事實上,載入表單、調整視窗尺寸和關閉 表單的過程,都會觸發一系列事件。 事實上,載入表單、調整視窗尺寸和關閉 表單的過程,都會觸發一系列事件。
9-2 表單事件 - 常用事件 常用的表單事件,如下表所示: 常用的表單事件,如下表所示:
9-3 滑鼠事件 Click 與 DoubleClick 事件 Click 與 DoubleClick 事件 MouseUp 和 MouseDown 事件 MouseUp 和 MouseDown 事件 MouseEnter 、 MouseMove 和 MouseLeave 事件 MouseEnter 、 MouseMove 和 MouseLeave 事件
9-3 滑鼠事件 滑鼠事件是在表單或控制項上操作滑鼠時,移動、 按一下和按二下等操作所觸發的一系列事件,如 下表所示: 滑鼠事件是在表單或控制項上操作滑鼠時,移動、 按一下和按二下等操作所觸發的一系列事件,如 下表所示:
9-3-1 Click 與 DoubleClick 事件 - 說明 當使用者以滑鼠在表單或控制項上按一下 時,就觸發 Click 事件,按二下則是觸發 DoubleClick 事件。 當使用者以滑鼠在表單或控制項上按一下 時,就觸發 Click 事件,按二下則是觸發 DoubleClick 事件。 事實上,觸發 Click 事件時是依序觸發 MouseDown 、 Click 和 MouseUp 事件; DoubleClick 事件會依序觸發 MouseDown 、 Click 、 DoubleClick 和 MouseUp 事件。 事實上,觸發 Click 事件時是依序觸發 MouseDown 、 Click 和 MouseUp 事件; DoubleClick 事件會依序觸發 MouseDown 、 Click 、 DoubleClick 和 MouseUp 事件。
9-3-1 Click 與 DoubleClick 事件 - 使用 Click 事件 在 Windows 應用程式表單和控制項使用 Click 事件的時機,如下所示: 在 Windows 應用程式表單和控制項使用 Click 事件的時機,如下所示: 按下按鈕執行程式碼,在本章前的範例程式都 是使用 Click 事件。 按下按鈕執行程式碼,在本章前的範例程式都 是使用 Click 事件。 在選項按鈕或核取方塊選取或勾選選項。 在選項按鈕或核取方塊選取或勾選選項。 將標籤控制項模擬成按鈕控制項按下的功能。 將標籤控制項模擬成按鈕控制項按下的功能。
9-3-1 Click 與 DoubleClick 事件 - 使用 DoubleClick 事件 DoubleClick 事件在表單控制項使用的機會 並不多,以目前說明的控制項來說,只有 表單、標籤和文字方塊支援 DoubleClick 事 件,第 10 章的清單方塊和下拉式清單方塊 控制項也支援 DoubleClick 事件。 DoubleClick 事件在表單控制項使用的機會 並不多,以目前說明的控制項來說,只有 表單、標籤和文字方塊支援 DoubleClick 事 件,第 10 章的清單方塊和下拉式清單方塊 控制項也支援 DoubleClick 事件。
9-3-2 MouseUp 和 MouseDown 事件 MouseUp 和 MouseDown 事件是當使用者按下滑 鼠按鍵和放開時,產生的事件。程式碼可以從事 件處理程序參數 e 的 MouseEventArgs 物件取得 使用者按下哪一個按鍵。 MouseUp 和 MouseDown 事件是當使用者按下滑 鼠按鍵和放開時,產生的事件。程式碼可以從事 件處理程序參數 e 的 MouseEventArgs 物件取得 使用者按下哪一個按鍵。 物件常用的屬性,如下表所示: 物件常用的屬性,如下表所示:
9-3-3 MouseEnter 、 MouseMove 和 MouseLeave 事件 - 說明 MouseEnter 和 MouseLeave 事件是滑鼠 進入控制項和離開控制項時產生的事件, 我們可以使用這 2 個事件建立控制項的動畫 效果。例如:進入控制項時,背景色彩為 紅色,離開時控制項變成綠色。 MouseEnter 和 MouseLeave 事件是滑鼠 進入控制項和離開控制項時產生的事件, 我們可以使用這 2 個事件建立控制項的動畫 效果。例如:進入控制項時,背景色彩為 紅色,離開時控制項變成綠色。 MouseMove 事件是在滑鼠移動時產生的一 系列事件,在程式中只需使用此事件,就 可以建立滑鼠拖拉控制項的效果,因為需 要調整控制項位置,換句話說,我們需要 在程式碼取得控制項的座標和尺寸。 MouseMove 事件是在滑鼠移動時產生的一 系列事件,在程式中只需使用此事件,就 可以建立滑鼠拖拉控制項的效果,因為需 要調整控制項位置,換句話說,我們需要 在程式碼取得控制項的座標和尺寸。
9-3-3 MouseEnter 、 MouseMove 和 MouseLeave 事件 - 屬性 其相關屬性如下表所示: 其相關屬性如下表所示:
9-4 鍵盤事件 KeyDown 和 KeyUp 事件 KeyDown 和 KeyUp 事件 KeyPress 事件 KeyPress 事件
9-4 鍵盤事件 當在文字方塊控制項輸入文字內容時,控 制項會觸發一系列鍵盤事件,如下表所示: 當在文字方塊控制項輸入文字內容時,控 制項會觸發一系列鍵盤事件,如下表所示:
9-4-1 KeyDown 和 KeyUp 事件 KeyDown 和 KeyUp 事件處理程序是依參數 的 KeyEventArgs 物件屬性來取得按下哪 一個按鍵,其相關屬性如下表所示: KeyDown 和 KeyUp 事件處理程序是依參數 的 KeyEventArgs 物件屬性來取得按下哪 一個按鍵,其相關屬性如下表所示:
9-4-2 KeyPress 事件 KeyPress 事件是在 KeyDown 事件之後和 KeyUp 事件之前觸發,可以使用函數來取 得按鍵的 ASCII 碼,在事件處理程序傳入的 參數是 KeyPressEventArgs 物件,其相關 屬性如下表所示: KeyPress 事件是在 KeyDown 事件之後和 KeyUp 事件之前觸發,可以使用函數來取 得按鍵的 ASCII 碼,在事件處理程序傳入的 參數是 KeyPressEventArgs 物件,其相關 屬性如下表所示:
KeyPress 事件 在事件程序內使用 e.KeyChar 取回按鍵值 在事件程序內使用 e.KeyChar 取回按鍵值 EX:EX: If e.KeyChar=Microsoft.VisualBasic.ChrW(Keys.Return) ThenIf e.KeyChar=Microsoft.VisualBasic.ChrW(Keys.Return) Then If e.KeyChar ” 9 ” ThenIf e.KeyChar ” 9 ” Then If e.KeyChar=vbBack Then ‘ 按下 BackSpaceIf e.KeyChar=vbBack Then ‘ 按下 BackSpace e.Handled=True 設定按健不置入 TextBox 控制項e.Handled=True 設定按健不置入 TextBox 控制項 常用按鍵 常用按鍵 Ctrl+A 至 Ctrl+Z (1 至 26) Ctrl+A 至 Ctrl+Z (1 至 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) Windows 功能鍵 (91) Apps (93)Windows 功能鍵 (91) Apps (93) Space (32)Space (32)
KeyPress 事件 e.Alt : 判段是否按下 Alte.Alt : 判段是否按下 Alt e.Shift : 判段是否按下 Shife.Shift : 判段是否按下 Shif e.Control : 判段是否按下 Controle.Control : 判段是否按下 Control e.Alt : 判段是否按下 Alte.Alt : 判段是否按下 Alt e.KeyCode 取得 ASCII 編碼e.KeyCode 取得 ASCII 編碼 e.KeyCode.ToString : 取得按鍵字碼e.KeyCode.ToString : 取得按鍵字碼 鍵盤九宮格 : 鍵盤九宮格 : Home: 36 ↑ :38 PgUp: 33Home: 36 ↑ :38 PgUp: 33 ← :37 5: 12 → : 39 ← :37 5: 12 → : 39 End :35 ↓ :40 PgDn: 34End :35 ↓ :40 PgDn: 34 F1(112) F2 (113) … F12 (123)F1(112) F2 (113) … F12 (123)
9-5 表單的鍵盤事件 - 啟用 Visual Basic 表單在預設情況下,為了避免 影響執行效率,並不會觸發鍵盤事件,所 以上一節範例程式都是使用 TextBox 文字 方塊控制項來觸發鍵盤事件。 Visual Basic 表單在預設情況下,為了避免 影響執行效率,並不會觸發鍵盤事件,所 以上一節範例程式都是使用 TextBox 文字 方塊控制項來觸發鍵盤事件。 表單如果需要作為回應鍵盤事件的傾聽者 物件,請設定表單的 KeyPreview 屬性為 True ,如下表所示: 表單如果需要作為回應鍵盤事件的傾聽者 物件,請設定表單的 KeyPreview 屬性為 True ,如下表所示:
9-5 表單的鍵盤事件 -Split() 函數 Visual Basic 的 Split() 函數可以將字串以指定分 隔字串切割成字串陣列,如下所示: Visual Basic 的 Split() 函數可以將字串以指定分 隔字串切割成字串陣列,如下所示: Dim str As String = "This/is/a/book." Dim arrString() As String = Split(str, "/") 上述程式碼傳回以第 2 個參數 "/" 來分割第 1 個參數 成為字串陣列,其執行結果相當於宣告字串陣列, 如下所示: 上述程式碼傳回以第 2 個參數 "/" 來分割第 1 個參數 成為字串陣列,其執行結果相當於宣告字串陣列, 如下所示: Dim arrString() As String = _ {"This", "is", "a", "book."} {"This", "is", "a", "book."}
9-6 控制項的事件 文字方塊控制項的 文字方塊控制項的 TextChanged 事件 TextChanged 事件 核取方塊與選項按鈕的 核取方塊與選項按鈕的 CheckedChanged 事件 CheckedChanged 事件
9-6-1 文字方塊控制項的 TextChanged 事件 文字方塊控制項的 TextChanged 事件是輸 入文字過程觸發的事件。它是在 KeyDown 、 KeyPress 事件後觸發 TextChanged 事件, 最後是 KeyUp 事件。 TextChanged 事件可 以建立動態資料變更,我們可以在輸入資 料後,就馬上輸出輸入的內容。事件說明 如下表所示: 文字方塊控制項的 TextChanged 事件是輸 入文字過程觸發的事件。它是在 KeyDown 、 KeyPress 事件後觸發 TextChanged 事件, 最後是 KeyUp 事件。 TextChanged 事件可 以建立動態資料變更,我們可以在輸入資 料後,就馬上輸出輸入的內容。事件說明 如下表所示:
9-6-2 核取方塊與選項按鈕的 CheckedChanged 事件 核取方塊與選項按鈕擁有 CheckedChanged 事件,可以建立動態選 項的選取,例如:在之前點餐系統,只需 配合 CheckedChanged 事件,就可以在選 取餐點後,馬上計算目前的總金額。其說 明如下表所示: 核取方塊與選項按鈕擁有 CheckedChanged 事件,可以建立動態選 項的選取,例如:在之前點餐系統,只需 配合 CheckedChanged 事件,就可以在選 取餐點後,馬上計算目前的總金額。其說 明如下表所示: