【发布时间】:2016-11-29 21:33:13
【问题描述】:
当用户按下键盘上的向上箭头,而按钮具有焦点时,我必须捕捉到这一点。我编写了这段代码来处理按钮的 KeyUp 事件:
private void btnValider_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Up)
{
//do stuff
}
}
但此函数无法处理按向上箭头键。
我不知道我想做的事情是否可行,或者我是否必须从表单中处理这个事件?
【问题讨论】:
-
初始化时在表单中添加
PreviewKey = true;。然后您可以检查表单中的输入,例如void meForm_KeyUp(object sender, KeyEventArgs e) { if(btnValidaer.HasFocus) { /*logic here*/ } }或者您可以添加IMessageFilter接口,或者您可以覆盖WndProc(ref Message msg)方法 -
参见documentation for
KeyUp: - “某些键,例如 TAB、RETURN、ESC 和 箭头键由控件自动处理。拥有这些键引发 KeyUp 事件,您必须覆盖表单上每个控件中的 IsInputKey 方法。覆盖 IsInputKey 的代码需要确定是否按下了某个特殊键并返回 true 值。" -
@m.rogalski PreviewKey 仅在 Form 上可用,它无助于捕捉箭头键
-
箭头键和 Tab 用于导航。所以你永远不会得到那个事件,它在到达按钮之前就被拦截了。使用 KeyPreview 也不是解决办法。目前还不清楚 Keys.Up 需要做什么,因此最佳解决方案并不明显。覆盖 ProcessCmdKey() 以进行通用修复。