C# 按箭头键,不聚焦任何控件
我有一个windows窗体,它有很多控件。无论何时单击任何键(如箭头键),我都希望引发一个事件。问题不在代码中,问题在于控件有一个选项卡索引,因此每当我单击箭头键时,光标只会移动到另一个控件,而这正是我不想要的。将每个控件的KeyDown事件附加到同一个处理程序:C# 按箭头键,不聚焦任何控件,c#,navigation,arrow-keys,C#,Navigation,Arrow Keys,我有一个windows窗体,它有很多控件。无论何时单击任何键(如箭头键),我都希望引发一个事件。问题不在代码中,问题在于控件有一个选项卡索引,因此每当我单击箭头键时,光标只会移动到另一个控件,而这正是我不想要的。将每个控件的KeyDown事件附加到同一个处理程序: Control.KeyDown+=new KeyEventHandler(Control_KeyDown); private void Control_KeyDown(object sender, KeyEventArgs e)
Control.KeyDown+=new KeyEventHandler(Control_KeyDown);
private void Control_KeyDown(object sender, KeyEventArgs e)
{
//trap here and handle
if(e.KeyCode == Keys.Left || e.KeyCode == Keys.Right || e.KeyCode == Keys.Up || e.KeyCode == Keys.Down)
e.Handled = true;
}
将每个控件KeyDown事件附加到同一处理程序:
Control.KeyDown+=new KeyEventHandler(Control_KeyDown);
private void Control_KeyDown(object sender, KeyEventArgs e)
{
//trap here and handle
if(e.KeyCode == Keys.Left || e.KeyCode == Keys.Right || e.KeyCode == Keys.Up || e.KeyCode == Keys.Down)
e.Handled = true;
}
您必须确保当前窗体上没有任何活动控件。将此代码放在Form.cs中
this.ActiveControl = null;
您必须确保当前窗体上没有任何活动控件。将此代码放在Form.cs中
this.ActiveControl = null;
经过一些测试,我发现了
protected override bool ProcessDialogKey(Keys keyData)
{
return false;
}
这将导致箭头键(和tab键)作为正常的按键事件传递。这也会导致正常的对话键功能(例如Tab键和箭头键)停止,但在我发现一些测试后仍会出现按键事件
protected override bool ProcessDialogKey(Keys keyData)
{
return false;
}
这将导致箭头键(和tab键)作为正常的按键事件传递。这也会导致正常的对话键功能(例如,制表键和箭头键)停止,但仍会获取KeyDown事件在表单中捕获事件并将KeyPreview设置为false。@HighCore-必须设置为true,默认情况下为truefalse@AppDeveloper这就是我的意思。我已经很久没有使用恐龙winforms了。@HighCore-他发生了!捕获表单本身中的事件,并将KeyPreview设置为false。@HighCore-必须设置为true,默认情况下为truefalse@AppDeveloper这就是我的意思。我已经很久没有使用恐龙winforms了。@HighCore-他发生了!这将完全占用箭头键的功能,假设您是一个TextBox控件,箭头不工作以更改TextBox中的光标位置。同意,需要有一个程序测试编辑控件并相应地处理…这将完全占用箭头键的功能,假设您是一个TextBox控件,箭头不用于更改TextBox中的光标位置。同意,需要有一个程序来测试编辑控件并相应地处理…这段代码解决了整个问题,当然我必须添加此项。KeyPreview=true;一年前我也遇到了同样的问题:)那段代码解决了整个问题,当然我必须添加这个;一年前我也有同样的问题:)