Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按箭头键,不聚焦任何控件_C#_Navigation_Arrow Keys - Fatal编程技术网

C# 按箭头键,不聚焦任何控件

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)

我有一个windows窗体,它有很多控件。无论何时单击任何键(如箭头键),我都希望引发一个事件。问题不在代码中,问题在于控件有一个选项卡索引,因此每当我单击箭头键时,光标只会移动到另一个控件,而这正是我不想要的。

将每个控件的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;
 }

将每个控件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;一年前我也遇到了同样的问题:)那段代码解决了整个问题,当然我必须添加这个;一年前我也有同样的问题:)