C# 尝试在窗体中使用KeyDown事件捕获导航箭头Up和箭头Down

C# 尝试在窗体中使用KeyDown事件捕获导航箭头Up和箭头Down,c#,winforms,user-controls,flowlayoutpanel,C#,Winforms,User Controls,Flowlayoutpanel,我有一个flowlayoutPanel,动态添加了大约50个userControl 我在表单中使用this.KeyPreview=true,以便能够捕获表单中的事件。 现在,我使用此eventhandler: private void Form1_KeyDown(object sender, KeyEventArgs e) { } 要使KeyDown能够捕捉空格键,+字符和导航键pageUp和pageDown。这很有效 我还需要捕捉导航箭头向上和向下,但唯一有效的 对我来说,解决方案是

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

我在表单中使用
this.KeyPreview=true
,以便能够捕获表单中的事件。 现在,我使用此eventhandler:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{    
}
要使KeyDown能够捕捉空格键,+字符和导航键pageUp和pageDown。这很有效

我还需要捕捉导航箭头向上和向下,但唯一有效的 对我来说,解决方案是使用一个事件处理程序来处理这样的KeyUp。 当我使用事件处理程序Form1\u KeyUp事件时,我可以使用navigatiobn键arrowUp和arroeDown

 private void Form1_KeyUp(object sender, KeyEventArgs e)
 {          
 }
我尝试使用此事件处理程序

private void Form1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{    
}
但当我向上和向下单击导航箭头时,从未调用过此选项

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


欢迎提供任何帮助。

只需重写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);
  }
}

当我使用导航键pageUp、pageDown、arrowUp和arrowUp时,flowlayoutPanel中的UserControl作为acive contrfol。