如何在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,以便您想要忽略的键。