0

我有一个包含一堆控件的 Windows 窗体。每当单击任何键(例如箭头键)时,我都想引发一个事件。问题不在代码中,问题在于控件有一个选项卡索引,所以每当我点击箭头键时,光标只会移动到另一个控件,这就是我不想要的。

4

3 回答 3

2

将每个控件的 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;
 }
于 2013-01-25T21:42:15.877 回答
2

您必须确保当前表单上没有任何活动控件。将此代码放入 Form.cs

this.ActiveControl = null;
于 2013-01-25T21:43:50.480 回答
2

经过一些测试,我发现

    protected override bool ProcessDialogKey(Keys keyData)
    {
        return false;
    }

这将导致箭头键(和选项卡)作为正常的 KeyDown 事件传递。这也会导致正常的对话键功能(例如 Tab 和箭头键)停止,但仍会收到 KeyDown 事件

于 2013-01-25T21:45:55.510 回答