3

TextBoxかなり小さなリストから文字列を取り出して単語を「補完」するクイックオートコンプリート機能を実装しました。キャレットはTextBox最後にキーを押した場所に留まり、ユーザーがまだ入力していない単語の部分が強調表示されるため、別の何かを入力し始めると、入力のこのセクションが削除されます。

こだわりは、完了して部分的に強調表示すると、スペースバーが「受け入れ」キーとして機能するようにする必要があることです。たとえば、キャレットを完了した単語の最後に移動します。ただし、スペースを押すと、単語の強調表示された部分が削除されます(他のキーを押すのと同じように、スペース文字に置き換えられます)。

私はこれを試しました:

private void textBoxIncidentLogTypes_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Space)
    {
        textBoxIncidentLogTypes.CaretIndex = textBoxIncidentLogTypes.Text.Length;
    }
}

しかし、これが「機能」している間は、スペース キーがフレーズの最良の部分を破壊した後に起動されます。に入力される前にキープレスをキャプチャする方法はありますTextBoxか?

4

2 に答える 2

2

代わりにPreviewKeyDownイベントを処理してみてください。TextBox がキーを処理するに発生する必要があります。

でスペース キーも処理するかTextBox(つまり、キャレットを移動した後にスペースを挿入するか)e.Handledに応じて、PreviewKeyDown でtrue(これ以上処理を行わない) またはfalse(TextBox にスペースを処理させる) のいずれかに設定できます。キーも)。

于 2010-01-21T13:09:44.287 に答える
1

KeyDown イベントの代わりに PreviewKeyDown イベントを試して、KeyEventArgs e.Handled プロパティを true に設定してください。

private void textBoxIncidentLogTypes_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Space)
    {
        textBoxIncidentLogTypes.CaretIndex = textBoxIncidentLogTypes.Text.Length;
        e.Handled = true;
    }
}
于 2010-01-21T13:11:35.273 に答える