子控件后的C#进程快捷键

时间:2012-08-14 16:35:30

标签: c# winforms events keyboard-shortcuts

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

我在主控件中使用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;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

我正在做的是覆盖表单中的ProcessDialogKey method,类似于this SO posting中的描述:

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);
}