【发布时间】:2009-08-23 10:23:43
【问题描述】:
我需要禁用表单上的箭头更改焦点。有没有简单的方法可以做到这一点?
谢谢
【问题讨论】:
我需要禁用表单上的箭头更改焦点。有没有简单的方法可以做到这一点?
谢谢
【问题讨论】:
类似的东西:
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;
}
}
【讨论】:
我最终得到了下面的代码,它将功能设置为表单上的每个控件:
(代码基于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;
}
}
【讨论】:
我尝试了这种方法,表单处理一次预览事件。它生成的代码比其他选项少。
只需将此方法添加到表单的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;
}
}
【讨论】:
Form.KeyPreview=true)。只有当我在 Form_Load 中添加了 foreach() 时,行为才发生变化。你测试过吗?
您应该在表单上将KeyPreview 设置为true。处理 KeyDown/KeyUp/KeyPress 事件并将事件处理程序中的 e.Handled 设置为 true 以获取您想要忽略的键。
【讨论】: