尝试在表单中使用KeyDown事件来捕获导航arrowUp和arrowDown

时间:2016-09-20 12:45:54

标签: c# winforms user-controls flowlayoutpanel

我有一个flowlayoutPanel,动态添加了大约50个userControl。

我在表单中使用this.KeyPreview = true来捕获表单中的事件。 现在我使用这个事件处理程序:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{    
}

让KeyDown能够捕获空格键, + 字符以及导航键pageUp和pageDown。这很好用。

我还需要捕捉导航arrowUp和arrowDown但是唯一有效的 我的解决方案是像这样使用KeyUp的事件处理程序。 当我使用事件处理程序Form1_KeyUp事件时,我可以使用navigatiobn键arrowUp和arroeDown。

 private void Form1_KeyUp(object sender, KeyEventArgs e)
 {          
 }

我尝试使用此事件处理程序

private void Form1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{    
}

但是当我点击导航arrowUp和arrowDown时,永远不会调用它。

我希望能够在KeyDown的事件处理程序中捕获所有内容,例如(pageUp,pageDown,空格键,+字符arrowUp和arrowDown)

欢迎任何帮助。

1 个答案:

答案 0 :(得分:0)

只是覆盖ProcessCmdKey函数更简单:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
  if (keyData == Keys.Up) {
    // do something here
    return true;
  } else {
    return base.ProcessCmdKey(ref msg, keyData);
  }
}