2017-04-06 87 views
1

的我试图打电话与键盘上的左右键功能,但不知道如何去做正确的方法。使用左/右键盘按键

在这种尝试的结果是,按下左/右键盘按键的GUI元素之间只是切换通常的方式,并没有作品给予的功能。不知道这里出了什么问题:

private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Right) 
     { 
      func1(); 
     } 
     else if (e.KeyCode == Keys.Left) 
     { 
      func2(); 
     } 
    } 
+2

您是否在表单上启用了KeyPreview? – Equalsk

+2

我想那是因为你没有处理事件。调试时断点是否会触发?我认为[keyprieview属性](https://msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview(v = vs.110).aspx)是你正在寻找的。 – Reniuz

回答

2

在某些注释中提到的启用keypreview的替代方法是覆盖ProcessCmdKey方法。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    if (keyData == Keys.Right) 
    { 
     func1(); 
     return true; 
    } 
    else if (keyData == Keys.Left) 
    { 
     func2(); 
     return true; 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
} 

欲了解更多信息,请参阅this MSDN article

+0

这似乎是正确的答案。将'KeyPreview'设置为'true'并不总是足够的,如果例如“Form”的'KeyDown'处理程序仍然不会被调用。一个'Button'有重点。 'ProcessCmdKey'总是被调用。 –

1

你的代码工作正常,你不能事先按任何东西。我认为你正在寻找一个通用的keydown,如图所示here