///
///
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
switch (keyData)
case (Keys.Tab | Keys.Control):
return true;
default:
break;
return base.ProcessCmdKey(ref msg, keyData);
/// <summary> /// 当焦点在这个软件时,输入的按键会经过此函数/// 将屏蔽Alt+Tab/// </summary> /// <param name="msg"></param> /// <param name="keyData"></param> /// <returns></returns> protected .
在
C#
winform 应用程序中,对于键盘响应
事件
,经常使用到”KeyPress”、“KeyUp”、”KeyDown”
事件
,可以处理某个
按键
的自定义处理
事件
。有时想定义方向键的自定义处理
事件
时,你可以发现,虽然自定义的处理
事件
发生了响应,但是也可以看到,按下方向键时,发现窗体上控件的焦点也发生了切换。而这种结果不是我们想要的,我们不想按下方向键时,控件的焦点发生切换,只想响应我们自定义的处理函数即可。下面的方法可以取消方向键对控件焦点的控制: 代码如下:protected override bool
ProcessCmdKey
(ref Message msg, Keys keyData)//
在winform程序中给form添加了keyup
事件
,但是程序却不响应键盘
事件
,解决办法是
重写
Form基类的
ProcessCmdKey
(ref Message msg, Keys keyData)方法。 代码如下:protected override bool
ProcessCmdKey
(ref Message msg, Keys keyData) { if (keyData == Keys.F4) { FormFastHitStates form = new FormFastHitStates();
实现计算器程序时,发现捕捉了回车的KeyPress
事件
,但按下回车键依旧失效,且执行的是获得焦点按钮的click
事件
。
一开始考虑到是优先级,或者是捕捉失效,后来发现进都没进Keypress,而且设立了窗体优先级KeyPreview属性后依旧如此。后来经过查找,发现一些常见的命令键位有
事件
设计,可以通过修改
ProcessCmdKey
来实现
ProcessCmdKey
Proc...
protected override bool
ProcessCmdKey
(ref Message msg, Keys keyData)
if (keyData == Keys.Escape)
simpleButton2_Click(null, null);
protected override bool
ProcessCmdKey
(ref Message msg, Keys keyData)
if (keyData == Keys.Space)
// 处理空格键
事件
MessageBox.Show("空格键被按下");
return true; // 表示已处理
事件
,不继续传递
return base.
ProcessCmdKey
(ref msg, keyData);
重写
ProcessCmdKey
方法可以处理所有
按键
事件
,包括空格键。在这个方法中,可以判断当前按下的键是否是空格键,如果是则处理它并返回true,表示已经处理了该
事件
,不再传递给父窗体或其他控件。
这样,当子窗体处于焦点状态时,按下空格键会优先触发子窗体的操作。