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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值