如何在C#中使用箭头禁用WinForm上的导航?

我需要禁用在窗体上使用箭头更改焦点。 有一个简单的方法怎么做?

谢谢

有点像:

private void Form1_Load(object sender, EventArgs e) { foreach (Control control in this.Controls) { control.PreviewKeyDown += new PreviewKeyDownEventHandler(control_PreviewKeyDown); } } void control_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right) { e.IsInputKey = true; } } 

我最终得到了下面的代码,它将function设置为对窗体的每个控件:

(代码基于andynormancx中的代码)

 private void Form1_Load(object sender, EventArgs e) { SetFeatureToAllControls(this.Controls); } private void SetFeatureToAllControls(Control.ControlCollection cc) { if (cc != null) { foreach (Control control in cc) { control.PreviewKeyDown += new PreviewKeyDownEventHandler(control_PreviewKeyDown); SetFeatureToAllControls(control.Controls); } } } void control_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right) { e.IsInputKey = true; } } 

我试过这个aproach,表单处理预览事件一次。 它生成的代码少于其他选项。

只需将此方法添加到窗体的PreviewKeyDown事件,并将KeyPreview属性设置为true

 private void form1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { switch (e.KeyCode) { case Keys.Up: case Keys.Down: case Keys.Left: case Keys.Right: e.IsInputKey = true; break; default: break; } } 

您应该在表单上将KeyPreview设置为true。 处理KeyDown/KeyUp/KeyPress事件,并将eventhandler中的e.Handled设置为true,以便您想要忽略的键。