1

我的WinForms应用程序中有快捷键,但我想在子控件之后处理它们。

我在主控件中使用 KeyDown 事件,'g' 键用于显示网格。但是在主控件内的编辑框中,当我按下“g”键时,会显示网格并且编辑框会收到“g”。如果我设置快捷键处理的“g”键,编辑框不会收到“g”键。

=> 我的目标是让所有的键首先由孩子处理,然后由主窗口处理,如果还没有处理的话。

这是一个代码片段:

public ShortCutManager(Control Control, string Title)
{
    _Control = Control;
    _Control.KeyDown += OnKeyDown;
}

private void OnKeyDown(object Sender, KeyEventArgs KeyEventArgs)
{               
    if (KeyEventArgs.KeyCode == Keys.G)
    {
        // What I need
        SendKeyEventToChildren(KeyEventArgs);

        if (KeyEventArgs.Handled == false)
        {
            DoShortcutCommand();
            KeyEventArgs.Handled = true;
        }
    }
}
4

1 回答 1

1

我正在做的是覆盖我的表单中的ProcessDialogKey方法,类似于此 SO 帖子中描述的方法:

protected override bool ProcessDialogKey(Keys keyData)
{
    // Example: Handle Ctrl+C.
    if ((keyData & Keys.Control) == Keys.Control && (keyData & Keys.C) == Keys.C)
    {
        // Do some processing here...

        return true;
    }

    return base.ProcessDialogKey(keyData);
}
于 2012-08-16T09:03:40.917 回答