0

検索ボックスと結果を含むデータグリッドビューを備えたフォームがあります。必要なのは、文字キーまたは数字キーを押すたびに常にフォーカスを取得し、キーを処理するための検索ボックスです。たとえば、データグリッドに注目して文字を押すと、検索ボックスに移動します。(さらに、フォームで上矢印または下矢印が押されるたびに、フォーカスはデータグリッドに移動しますが、問題はありませんでした。)

これで、以下のコードは文字のチャームとして機能します。ただし、数字にたどり着くと、同じ方法ではできません(e.KeyCode.ToString()数字ではなく、「d0」または「numpad0」が表示されるため)。

    private void Form_KeyDown(object sender, KeyEventArgs e)
    {
        if (!this.tbxSearch.Focused)
        {
            if ((e.KeyCode >= Keys.A) && (e.KeyCode <= Keys.Z))
            {
                this.tbxSearch.Focus();
                this.tbxSearch.Text = (e.Shift) ? e.KeyCode.ToString() : e.KeyCode.ToString().ToLower();
                this.tbxSearch.SelectionStart = this.tbxSearch.Text.Length;
            }
        }
    }

もちろん、ほぼ同じ方法で " e.KeyCode.ToString()" の最後の文字を取得することもできますが、私にはうまくいきません。つまり、フォーカスを変更してから、押されたキーをコントロールに処理させる簡単な方法が必要です。

イベントで作成しようとしましたPreviewKeyDownが、フォームによってトリガーされません (KeyPreviewプロパティが に設定されていてもtrue):

    private void Form_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
    {
        if ((e.KeyCode == Keys.Down) || (e.KeyCode == Keys.Up))
            this.dgvResults.Focus();
        else
            this.tbxSearch.Focus();
    }

フォームのフォーカスを変更して、新しいコントロールにキーを処理させるにはどうすればよいでしょうか?

4

1 に答える 1