1 第 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 控制項的事件
2 9-1 事件的基礎 什麼是事件 什麼是事件 建立事件處理程序 建立事件處理程序 共用事件處理程序 共用事件處理程序
什麼是事件 - 說明 「事件」( Event )是在執行視窗應用程式時, 滑鼠、鍵盤或表單載入時等操作所觸發的一些動 作,例如:如果將應用程式碼視為一輛公共汽車, 程式碼的執行就像公車依照行車路線在馬路上行 駛,事件就是在行駛過程中發生的一些需反應的 臨時狀況,如下所示: 「事件」( Event )是在執行視窗應用程式時, 滑鼠、鍵盤或表單載入時等操作所觸發的一些動 作,例如:如果將應用程式碼視為一輛公共汽車, 程式碼的執行就像公車依照行車路線在馬路上行 駛,事件就是在行駛過程中發生的一些需反應的 臨時狀況,如下所示: 看到馬路上的紅綠燈。 看到馬路上的紅綠燈。 乘客上車、投幣和下車。 乘客上車、投幣和下車。 不論那一路公車,雖然行駛路線不同,但 必須處理的 臨時狀況是一樣的 不論那一路公車,雖然行駛路線不同,但 必須處理的 臨時狀況是一樣的
什麼是事件 -VB.NET 的事件處理 VB.NET 的 Windows 應用程式事件處理是一種委 託方式的事件處理模型,分為: VB.NET 的 Windows 應用程式事件處理是一種委 託方式的事件處理模型,分為: 「事件來源」( Event Source ):引發事件的控制項 「事件來源」( Event Source ):引發事件的控制項 「傾聽者」( Listener ):等候事件發生並處理事件 的物件 「傾聽者」( Listener ):等候事件發生並處理事件 的物件 按鈕控制項 Button1 是事件來源,按一下按鈕就會觸發 Click 事件, Form1 表單物件的 Button1_Click 就是處理 此事件的處理程序, Form1 就是傾聽者物件。 按鈕控制項 Button1 是事件來源,按一下按鈕就會觸發 Click 事件, Form1 表單物件的 Button1_Click 就是處理 此事件的處理程序, Form1 就是傾聽者物件。
建立事件處理程序 - 方法 在 VB.NET 建立事件處理程序是在表單和控 制項建立,有如下 2 種方法: 在 VB.NET 建立事件處理程序是在表單和控 制項建立,有如下 2 種方法: 在表單設計工具連按二下控制項建立預設的事 件處理程式。 在表單設計工具連按二下控制項建立預設的事 件處理程式。 如果不是預設事件,可以在程式碼編輯視窗選 取【類別名稱】的控制項後,在【方法名稱】 選擇指定的事件。 如果不是預設事件,可以在程式碼編輯視窗選 取【類別名稱】的控制項後,在【方法名稱】 選擇指定的事件。
建立事件處理程序 - 預設事件
事件處理程序的參數 VB.NET 表單控制項的事件處理程序,如 下所示: VB.NET 表單控制項的事件處理程序,如 下所示: Private Sub Label1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Label1.DoubleClick End Sub
事件處理程序的參數 參數列擁有 2 個參數,其說明如下: 參數列擁有 2 個參數,其說明如下: 參數 sender :參數是 Object 資料型別,代表 觸發事件的物件,以此例是標籤 Label 物件 Label1 ,如果是按鈕就是 Button 物件、文字 方塊是 TextBox 物件、核取方塊是 CheckBox 和選項鈕是 RadioButton 。 參數 sender :參數是 Object 資料型別,代表 觸發事件的物件,以此例是標籤 Label 物件 Label1 ,如果是按鈕就是 Button 物件、文字 方塊是 TextBox 物件、核取方塊是 CheckBox 和選項鈕是 RadioButton 。 參數 e :參數是 EventArgs 物件,不同的事件 處理程序,其傳回的物件並不同,這個物件可 以取得進一步的事件資訊,例如:觸發事件時 的滑鼠游標位置等。 參數 e :參數是 EventArgs 物件,不同的事件 處理程序,其傳回的物件並不同,這個物件可 以取得進一步的事件資訊,例如:觸發事件時 的滑鼠游標位置等。
共用事件處理程序 如果表單上擁有 2 個按鈕控制項 Button1 和 Button2 ,依照之前的範例程式,需要分別建立 Button1_Click 和 Button2_Click 事件處理程序, 現在我們只需建立 Button1_Click 事件處理程序, 讓它同時處理 2 個按鈕的 Click 事件,如下所示: 如果表單上擁有 2 個按鈕控制項 Button1 和 Button2 ,依照之前的範例程式,需要分別建立 Button1_Click 和 Button2_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
共用事件處理程序 區分 sender 之範例程式 區分 sender 之範例程式 (1) btnButton = CTYPE(sender, Button) If btnButton.name = “Button1” Then If btnButton.name = “Button1” Then Else Else End if End if (2) btnButton = CTYPE(sender, Button) If btnButton is Button1 Then If btnButton is Button1 Then Else Else End if End if
表單事件
滑鼠事件
Click 與 DoubleClick 事件 - 說明 當使用者使用滑鼠在表單或控制項上按一下時, 就會觸發 Click 事件,連按二下觸發 DoubleClick 事件。 當使用者使用滑鼠在表單或控制項上按一下時, 就會觸發 Click 事件,連按二下觸發 DoubleClick 事件。 事實上,觸發 Click 事件時會依序觸發 MouseDown 、 Click 和 MouseUp 事件, DoubleClick 事件會依序觸發 MouseDown 、 Click 、 DoubleClick 和 MouseUp 事件。 事實上,觸發 Click 事件時會依序觸發 MouseDown 、 Click 和 MouseUp 事件, DoubleClick 事件會依序觸發 MouseDown 、 Click 、 DoubleClick 和 MouseUp 事件。
Click 事件的使用 Click 事件在 Windows 應用程式表單和控制項的 使用時機,如下所示: Click 事件在 Windows 應用程式表單和控制項的 使用時機,如下所示: 按下按鈕執行程式碼。 按下按鈕執行程式碼。 在選項按鈕或核取方塊選取或勾選選項。 在選項按鈕或核取方塊選取或勾選選項。 將標籤控制項模擬成按鈕控制項按下的功能。 將標籤控制項模擬成按鈕控制項按下的功能。
DoubleClick 事件的使用 DoubleClick 事件在 Windows 應用程式表單使用 的機會並不多,只有表單、標籤和文字方塊支援 DoubleClick 事件,第 10 章 (10-6) 的清單方塊 和下拉式清單方塊控制項也提供 DoubleClick 事 件。 DoubleClick 事件在 Windows 應用程式表單使用 的機會並不多,只有表單、標籤和文字方塊支援 DoubleClick 事件,第 10 章 (10-6) 的清單方塊 和下拉式清單方塊控制項也提供 DoubleClick 事 件。
MouseUp 、 MouseDown 事件 - 說明 MousUp 和 MouseDown 事件是在使用者 按下滑鼠按鍵和放開時產生的事件,程式 碼可以從事件處理程序的參數 e 的 MouseEventArgs 物件取得使用者是按下 了那一個按鈕。 MousUp 和 MouseDown 事件是在使用者 按下滑鼠按鍵和放開時產生的事件,程式 碼可以從事件處理程序的參數 e 的 MouseEventArgs 物件取得使用者是按下 了那一個按鈕。
MouseEventArgs 物件屬性 如果按在控制項上,表示相對 於控制項左上角之座標 如果沒有按在控制項上,表示 相對於表單左上角之座標
事件 MouseEnter 、 MouseMove 、 MouseLeave 事件 MouseEnter 、 MouseLeave 事件是在進 入控制項和離開控制項時產生的事件,我 們可以使用這兩個事件建立控制項的動畫 效果,例如:進入控制項時,背景色彩為 紅色,離開時控制項變成綠色。 MouseEnter 、 MouseLeave 事件是在進 入控制項和離開控制項時產生的事件,我 們可以使用這兩個事件建立控制項的動畫 效果,例如:進入控制項時,背景色彩為 紅色,離開時控制項變成綠色。 MouseMove 事件是在滑鼠移動時產生的一 系列事件,在程式中只需使用此事件,就 可以建立滑鼠拖拉控制項的效果。其預設 參數 e 為 MouseEventArgs 物件。 MouseMove 事件是在滑鼠移動時產生的一 系列事件,在程式中只需使用此事件,就 可以建立滑鼠拖拉控制項的效果。其預設 參數 e 為 MouseEventArgs 物件。
MouseEnter 、 MouseMove 、 MouseLeave 事件 - 屬性
鍵盤事件
KeyUp 和 KeyDown 事件 KeyEventArgs 物件屬性來取得按下那一個按鍵, 其相關屬性,如下表所示: KeyEventArgs 物件屬性來取得按下那一個按鍵, 其相關屬性,如下表所示:
KeyPress 事件 KeyPress 事件是在 KeyDown 事件之後和 KeyUp 事件之前觸發,可以取得按鍵的 ASCII 字元碼, 事件處理程序傳入的參數是 KeyPressEventArgs 物件,其相關屬性如下表所示: KeyPress 事件是在 KeyDown 事件之後和 KeyUp 事件之前觸發,可以取得按鍵的 ASCII 字元碼, 事件處理程序傳入的參數是 KeyPressEventArgs 物件,其相關屬性如下表所示:
表單的鍵盤事件 如果希望表單能夠作為回應鍵盤事件的物 件,我們需要設定表單的 KeyPreview 屬性, 如下表所示: 如果希望表單能夠作為回應鍵盤事件的物 件,我們需要設定表單的 KeyPreview 屬性, 如下表所示:
控制項的事件 文字方塊控制項的 TextChanged 事件 文字方塊控制項的 TextChanged 事件 核取方塊與選項按鈕的 CheckedChanged 事件 核取方塊與選項按鈕的 CheckedChanged 事件
文字方塊控制項的 TextChanged 事件 文字方塊控制項 TextChanged 事件觸發的 過程是在輸入文字內容時,在 KeyDown 、 KeyPress 事件後觸發此 TexChanged 事件, 最後是 KeyUp 事件,事件的說明如下表所 示: 文字方塊控制項 TextChanged 事件觸發的 過程是在輸入文字內容時,在 KeyDown 、 KeyPress 事件後觸發此 TexChanged 事件, 最後是 KeyUp 事件,事件的說明如下表所 示:
核取方塊與選項按鈕的 CheckedChanged 事件 核取方塊與選項按鈕都擁有 CheckedChanged 事件,其說明如下表所 示: 核取方塊與選項按鈕都擁有 CheckedChanged 事件,其說明如下表所 示: