我需要禁用使用表单上的箭头更改焦点。有一种简单的方法可以做到吗?
谢谢
答案 0 :(得分:16)
有些事情:
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;
}
}
答案 1 :(得分:4)
我最终得到了下面的代码,该代码将功能设置为对窗体的每个控制:
(代码基于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;
}
}
答案 2 :(得分:1)
您应该在表单上将KeyPreview
设置为true。处理KeyDown/KeyUp/KeyPress
事件并将eventhandler中的e.Handled
设置为true,以便您想要忽略这些键。
答案 3 :(得分:0)
我试过这个方法,表单处理预览事件一次。它生成的代码少于其他选项。
只需将此方法添加到表单的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;
}
}