C#_在按钮存在的状态获取按键消息

  • Post author:
  • Post category:其他


转自:

http://blog.sina.com.cn/s/blog_6f8a66150100n2cj.html


方法一:将控件 Enable 属性改为 false





将所有可以获取焦点的控件的 Enable 属性都调成 false ,当你需要用到的时候再将属性改为 true, 但是,当该控件的 Enable 属性改为 true 后,特殊按键又会无法获取。


方法二:KeyUp





事件方法中的 KeyUp ,KeyUp 故名思议就是在你按下键盘按键后松开那个时刻要处理的事件。这个事件虽然可以获取到方向键等特殊按键,但是,如果你需要的是在按键按下的时刻就要处理按键事件,例如打地鼠之类的,那么这可方法就显得不怎么可行了,而且当你的界面上有多个可以获取焦点的控件时,需要将每个控件的 KeyUp 事件都设置为一样,除非该控件有它自己的按键事件。


方法三:重写 ProcessCmdKey 函数





这个方法只需要在界面的类中重写 ProcessCmdKey 函数就可以实现获取特殊按键的功能,不需要为控件添加事件,但是,虽然它能够获取到按键,但是不会移动控件的焦点(普通情况下在你界面上存在多个可以获取焦点的控件的时候,按下方向键会切换控件的焦点),而且它获取的是全局的按键消息,就是说当你其中某个控件有自己的键盘按键事件的时候,会发现,两个按键事件函数都会被执行。



参考代码:









protected override bool ProcessCmdKey(ref Message msg, Keys keyData)








{













MessageBox.Show(keyData.ToString());












if (keyData == Keys.Up)












{

















MessageBox.Show(“up key pressed”);
















return true;












}












return base.ProcessCmdKey(ref msg, keyData);








}


附加提醒:






在C#中,要想获取一些特殊的按键例如 Tab、Esc 或是方向键等按键时,如果单是利用事件中的 KeyDown 或者 KeyPress 是获取不了的,而且就算你不需要用到获取特殊按键这么复杂的功能,就算只是获取简简单单的普通按键,你也还需要注意 KeyDown、KeyPress 只是获取单个控件的事件而已,要想无论焦点在哪个控件的情况都可以获取到你的按键要么需要将每个控件的 KeyDown、KeyPress 事件都设置为一样,但这样做未免麻烦。