検索ボックスと結果を含むデータグリッドビューを備えたフォームがあります。必要なのは、文字キーまたは数字キーを押すたびに常にフォーカスを取得し、キーを処理するための検索ボックスです。たとえば、データグリッドに注目して文字を押すと、検索ボックスに移動します。(さらに、フォームで上矢印または下矢印が押されるたびに、フォーカスはデータグリッドに移動しますが、問題はありませんでした。)
これで、以下のコードは文字のチャームとして機能します。ただし、数字にたどり着くと、同じ方法ではできません(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();
}
フォームのフォーカスを変更して、新しいコントロールにキーを処理させるにはどうすればよいでしょうか?