2016-11-29 121 views
0

当用户按下键盘上的向上箭头,而按钮具有焦点时,必须抓住按钮。我写了这段代码来处理按钮的KeyUp事件:当焦点在按钮上时按下键盘上的箭头按钮

private void btnValider_KeyUp(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Up) 
    { 
     //do stuff 
    } 
} 

但是这个函数没有处理按向上的箭头键。

我不知道我想做什么是可能的,或者如果我必须从窗体处理此事件?

+0

在表单中添加'PreviewKey = TRUE;'而初始化。然后你可以检查你的表单中的输入,例如'void meForm_KeyUp(object sender,KeyEventArgs e){if(btnValidaer.HasFocus){/ * logic here * /}}'或者你可以添加'IMessageFilter'接口,或者你可以重写'WndProc(ref Message msg)'方法 –

+2

参见[KeyUp'的文档:](https://msdn.microsoft.com/en-us/library/system.windows.forms.control.keyup(v = vs .110).aspx) - _“某些键,如TAB,RETURN,ESC和**箭头键**由控件自动处理。要使这些键引发KeyUp事件,必须重写IsInputKey方法您的表单上的每个控件都必须重写IsInputKey的代码,以确定是否按下了其中一个特殊键并返回true值。“_ – stuartd

+0

@ m.rogalski PreviewKey仅在Form上可用,并且不会帮助捕捉箭头键 – Kodre

回答

1

由于Hans Passant建议,

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     if (keyData == Keys.Up && btnValider.Focused) 
     { 
      MessageBox.Show("hit"); 

      return true; 
     } 
     else 
      return base.ProcessCmdKey(ref msg, keyData); 
    } 
+1

它没有义务添加'&& btnValider.Focused'。 'if(keyData == Keys.Up)'就足够了。我已经测试过了。 – ucef

-1

处理该按钮的按键事件。

+0

同样的问题:_“某些键,如TAB,RETURN,ESC和箭头键由控件自动处理,要使这些键提升** KeyDown事件** ...” – stuartd

相关问题