私はC#のウィンドウフォームで検索機能を実装しています。フォーム上でKeyPreview
をtrueに設定し、、esc
、enter
のようなものを捕まえることができるように、KeyDown
のイベントハンドラを追加しました。C#:フォームでTextPreviewを使用しているときにTextBoxがキーを受け取らない
これらのキーをうまくキャッチしていて、テキストボックスを表示させることはできますが、ボックスに入力することはできません。すべてのキーはPortsTraceForm_KeyDown(...)
になりますが、決してテキストボックスに表示されません。 msdnページ約KeyPreview
によれば、e.Handledをfalseに設定すると、イベントがフォーカスのあるビュー(テキストボックス)に渡されますが、これは起こっていません。私はKeyDown
イベントをテキストボックスに登録していないので、デフォルトの動作を使用する必要があります。私は何かを逃したか?
はKeyDownイベント:
private void PortsTraceForm_KeyDown(object sender, KeyEventArgs e)
{
e.SuppressKeyPress = true;
e.Handled = false;
if (e.KeyData == (Keys.F | Keys.Control)) // ctrl+f
{
e.Handled = true;
ShowSearchBar();
}
else if (e.KeyCode == Keys.Escape) // esc
{
e.Handled = true;
HideSearchBar();
}
else if (e.KeyCode == Keys.Enter) // enter
{
if (searchPanel.Visible)
{
e.Handled = true;
if (searchShouldClear)
SearchStart();
else
SearchNext();
}
}
}
ショー検索バー:
private void ShowSearchBar()
{
FindBox.Visible = true;
FindBox.Focus(); // focus on text box
}
非表示検索バー:
private void HideSearchBar()
{
this.Focus(); // focus on form
FindBox.Visible = false;
}
最初にTextBoxのfcusイベントをロストし、FindBox.Focus()の後にチェックを入れます。何とかTextBoxを呼び出すと、フォーカスが失われます。 – Tigran
カーソルがまだ表示され、点滅していることを除いて、これは良い提案です。フォーカスが失われていないことはかなりポジティブです。 – mtmurdock