一個獲有焦點的控件,當按下任一鍵的時候就會觸發鍵盤事件。如果需要對特殊字符,比如說方向鍵(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