第九章 視窗事件應用技巧
9-1 鍵盤事件介紹 KeyPress事件 當你在鍵盤上有做按鍵的動作時就會觸動KeyPress事件,但是所按的鍵必須是具有KeyAscii碼的按鍵,才會觸動(執行)KeyPress事件。至於有效的KeyPress按鍵如下表所示: 有效的按鍵 KeyAscii碼值 可顯示的鍵盤字元 字元的ASCII碼 Ctrl + A 至 Ctrl + Z 1至26 Enter 和 Ctrl + Enter 13和10 BackSpace 和 Ctrl + BackSpace 8(倒退鍵)和127 空白鍵 32
9-1 鍵盤事件介紹 以下是KeyPress事件的語法: 在.NET控制項的所有事件處理中,都必須傳入兩個引數,第一個引數表示觸發事件的物件(sender);第二個引數表示包含事件相關資料的物件(e)。而每一種.NET控制項所傳入事件引數可能不相同。
9-1 鍵盤事件介紹 在KeyPress事件中,所按鍵的字元可由e.KeyChar取得其鍵值,例如按下「a」會傳回a,按「Shift+a」則會傳回A。 在KeyPress事件中,如果設定 e.Handle = true; 則鍵盤輸入的內容不會輸入到TextBox中,也不會觸發TextChanged事件。
9-1 鍵盤事件介紹 二. KeyDown和KeyUp事件 KeyDown動作: 當你正按下鍵盤按鍵不放的時候,就會觸動KeyDown事件。 KeyUp和KeyDown事件能處理KeyPress事件所無法處理的按鍵,如功能鍵、編輯鍵和組合鍵。 e.Alt、e.Shift、e.Control:判斷是否按下Alt/Shift/Control鍵 e.KeyCode:取得鍵盤值,如按下a, e.KeyCode.ToString()會回傳A KeyPress事件可以傳回一個字元的ASCII鍵碼,但是無法得知目前鍵盤是持續按著,還是按一下就放開。 如輸入一個字元,則三個事件的發生順序為KeyDown事件,接著為KeyPress事件,最後是KeyUp事件。
9-1 鍵盤事件介紹 二. KeyDown和KeyUp中取得鍵盤值 用e.KeyValue.ToString() KeyUp和KeyDown事件能處理KeyPress事件所無法處理的按鍵,如功能鍵、編輯鍵和組合鍵。 e.Alt、e.Shift、e.Control:判斷是否按下Alt/Shift/Control鍵 e.KeyCode:取得鍵盤值(代號),如Keys.Up、Keys.Down… E.KeyValue:取得鍵盤值(數值),如65~90(A~Z) KeyPress事件可以傳回一個字元的ASCII鍵碼,但是無法得知目前鍵盤是持續按著,還是按一下就放開。 如輸入一個字元,則三個事件的發生順序為KeyDown事件,接著為KeyPress事件,最後是KeyUp事件。
9-2 滑鼠事件介紹 在Windows環境下,使用滑鼠操作讓使用者能很輕易地用來點取各種選項和按鈕、移動物件的圖示和插入點、編輯文件或是執行各種應用程式。這些動作都可以交由下列8個滑鼠事件來處理: 事件名稱 說 明 物件_Click 在物件上按滑鼠左鍵一下。 物件_DoubleClick 在物件上快按滑鼠左兩下。 物件_MouseDown 在物件上偵測到有滑鼠鍵被按住。 物件_MouseEnter 滑鼠指標進入物件的範圍內會觸發此事件。 物件_MouseHover 滑鼠指標停駐在物件上會觸發此事件。 物件_MouseLeave 滑鼠指標離開物件時會觸發此事件。 物件_MouseMove 在物件上偵測到滑鼠正在移動。 物件_MouseUp 在物件上偵測到已按住之滑鼠鍵被放開
9-2 滑鼠事件介紹(續) Click、DoubleClick事件 Click事件的使用時機有下列三種: 用來選取物件 : 例如移動滑鼠指標到某個圖示上按一下,使圖示名稱反白,或從表列清單方塊中的某選項上按一下使該選項反白。 使物件獲得控制權,以利由鍵盤鍵入資料 : 例如移動滑鼠指標到文字方塊內,按一下滑鼠左鍵,使文字方塊內出現閃爍的插入點游標。 執行指令 : 例如按指令按鈕、圖示鈕或功能表內指令選項。
9-2 滑鼠事件介紹 DoubleClick事件的使用時機如下: 開啟資料夾視窗 : 例如移動滑鼠到「我的電腦」圖示上快按滑鼠左鍵二下,開啟「我的電腦」視窗。 執行應用程式 : 例如在資料夾視窗中有程式檔圖示與文件檔圖示。若用滑鼠指標在該程式檔圖示上快按二下,即會執行該程式檔而開啟該程式視窗。若用滑鼠指標在該文件檔圖示上快按二下,則會開啟能處理該資料檔的程式視窗,並將該文件檔的資料顯示在程式視窗的編輯區內。 快速選取清單方塊選項 : 例如在「開啟舊檔」對話方塊中,在某檔案名稱上快按滑鼠左鍵二下,則可直接開啟該檔案,而不必按 鈕。
9-2 滑鼠事件介紹 二. MouseDown、MouseUp與MouseClick 事件 若在滑鼠任一鍵上面按一下,馬上會觸動MouseDown事件。若滑鼠鍵由按下的狀態再放開,馬上觸動MouseUp事件。無論滑鼠是否有被按下,只要移動滑鼠指標,馬上觸動MouseMove事件。所以,當我們按下滑鼠左鍵再放開,會同時觸動MouseDown、MouseUp和Click三個事件,其先後次序為MouseDown事件,接著為MouseUp事件,最後為Click事件。在滑鼠事件中是用e.Button 來偵測滑鼠按鈕是否有被按下或放開。如下: 若偵測到滑鼠左鍵,則 e.Button = MouseButtons.Left ; 若偵測到滑鼠中鍵,則 e.Button = MouseButtons.Middle ; 若偵測到滑鼠右鍵,則 e.Button = MouseButtons.Right ;
9-3 控制項共享事件技巧 使用屬性視窗設定共享事件 範例控制項共享事件(p9-29) 在C# .NET中可以透過屬性視窗的事件檢視畫面及EventHandler型別來設定控制項的共享事件 。 範例控制項共享事件(p9-29) 練習建立按鈕事件的共享事件。如下圖所示,根據你所按的按鈕,Label控制項會告知你所按下的按鈕名稱,本範例中的三個按鈕被按下時,皆觸發 的事件。
9-3 控制項共享事件技巧 二. 如何新增、刪除控制項的事件 在C# .NET可以使用EventHanlder型別來新增及刪除控制項的事件,而該事件必需符合事件之引數規則才行。例如以下寫法,當觸發btn1的Click事件時,即執行MyEvent事件;當觸發btn2的Click事件時,即移除btn2之Click的MyEvent事件。
9-3 控制項共享事件技巧 範例:新增與刪除控制項共享事件(p9-22) 當表單中兩個TextBox控制項的TextChanged事件被觸發時會執行MyButtonClick事件,MyButtonClick這個事件可進行兩數相加並將其結果顯示在Label控制項中。若按下 鈕時,兩個TextBox控制項的TextChanged事件所指定的MyButtonClick事件會被刪除,此時在TextBox控制項輸入資料將無法進行兩數相加。若按下 鈕時,兩個TextBox控制項指定MyButtonClick為TextChanged事件,此時在TextBox控制項輸入資料即可進行兩數相加。