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

私がやっていることは、この SO 投稿で説明されている方法と同様に、フォームのProcessDialogKeyメソッドをオーバーライドすることです。

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 に答える