Windows Forms 鍵盤事件

   一個獲有焦點的控件,當按下任一鍵的時候就會觸發鍵盤事件。如果需要對特殊字符,比如說方向鍵(arrow keys)的鍵盤事件做出響應,通常需要使用KeyDown或者KeyUp 事件,而KeyPress事件並不會觸發。當你需要限制用戶輸入並完成字符驗證的時候通常使用KeyPress事件。


       響應鍵盤的事件(根據事件觸發的先後順序)

KeyDown   在控件有焦點的情況下按下鍵時發生。事件會提供有關Alt鍵、Ctrl鍵、Shift鍵與鍵盤代碼(key code)狀態的附加信息(通過KeyEventArgs事件參數)。
KeyPress     在鍵按下完成且字符出現之前時發生。事件提供有關鍵盤字符的信息(通過KeyPressEventArgs事件參數)。同時該參數提供了Handled屬性,當設置爲true時取消字符輸入並禁止顯示在輸入控件上。
KeyUp          在控件有焦點的情況下釋放鍵時發生。發生在KeyPress事件之後,事件也會提供附加信息(通過KeyEventArgs事件參數)。


KeyPress 事件

view plaincopy to clipboardprint?
01.private void textBox1_KeyPress(object sender, KeyPressEventArgs e)  
02.{  
03.    //獲取按下的鍵所對應的字符   
04.    label1.Text = "Key Press: " + e.KeyChar.ToString();  
05.}  

 

KeyDown 事件

01.private void textBox1_KeyDown(object sender, KeyEventArgs e)  
02.{  
03.    //顯示按下的鍵盤代碼   
04.    //例如當按下D鍵,不管Shift鍵是否按下,總是顯示"D"   
05.    label1.Text = "Key Code : " + e.KeyCode.ToString();  
06.  
07.    //顯示按下的鍵盤值   
08.    //例如按下Shift鍵顯示16,按下D鍵顯示68   
09.    label1.Text += "\nKey Value :" + e.KeyValue.ToString();  
10.  
11.    //KeyData包含每一個按下鍵的信息(Keys 枚舉值的組合)   
12.    //調用ToString()獲取一個以逗號分隔的列表   
13.    label1.Text = "\nKey Data :" + e.KeyData.ToString();  
14.}  


輔助按鍵(Ctrl,Alt,Shift)

view plaincopy to clipboardprint?
01.private void textBox1_KeyDown(object sender, KeyEventArgs e)  
02.{  
03.    //使用Modifiers屬性檢查Alt,Control,Shift鍵是否按下   
04.    if ((e.Modifiers & Keys.Shift) == Keys.Shift)  
05.    {  
06.    }  
07.    //或者通過Alt,Control,Shift屬性檢查   
08.    if (e.Alt)  
09.    {  
10.    }  
11.}  

注:也可以在任何地方通過 Control.ModifierKeys屬性檢查輔助按鍵是否按下

窗體攔截KeyPress事件

Form 提供了一個KeyPreview屬性,如果設置爲true,窗體會在擁有焦點的控件之前接收到KeyPress事件。在處理Form的KeyPress事件時,如果設置KeyPressEventArgs.Handled屬性爲true,擁有焦點的控件不會接收到對應的KeyPress 事件。(如果不設置該屬性爲true,擁有焦點的控件會在Form之後接收到KeyPress事件)如果在KeyPresss事件中設置Handled屬性爲true,擁有焦點的控件仍然會接收KeyDown與KeyUp事件。

view plaincopy to clipboardprint?
01.//注:首先要設置Form的KeyPreview屬性爲true   
02.//在窗體級對輸入字符進行攔截   
03.protected override void OnKeyPress(KeyPressEventArgs e)  
04.{  
05.    //只允許輸入控制字符(例如Backspace)與數字鍵   
06.    if (!Char.IsControl(e.KeyChar) && !Char.IsDigit(e.KeyChar))  
07.    {  
08.        e.Handled = true;  
09.    }  
10.    base.OnKeyPress(e);  
11.}  
本文鏈接地址爲:http://blog.csdn.net/fan_ken/article/details/6604062
發佈了66 篇原創文章 · 獲贊 1 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章