2010-01-21 3 views
3

Я только что реализовал функцию быстрого автозаполнения в TextBox, которая вытягивает строку из довольно небольшого списка и «завершает» это слово. Картинка TextBox остается в месте, где он находился от последнего нажатия клавиши, и часть слова, которое пользователь еще не напечатал, становится подсвеченной, так что начало ввода чего-то еще приведет к удалению этого раздела ввода.Переопределение поведения ключевых слов по умолчанию в TextBox

Прикрепленный файл, который должен иметь его таким образом, что после завершения и частичной подсветки пробел работает как клавиша «принять» - например, он перемещает каретку до конца завершенного слова. Однако, несмотря на то, что я, кажется, занимаю место, удаляет выделенную часть слова (заменяя его символом пробела, точно так же, как если бы вы ударили любой другой ключ).

Я попытался это:

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

Но в то время как это «работает» он увольняет после пространства ключей разрушили лучшую часть фразы. Есть ли способ захватить нажатие клавиши, прежде чем он набирается в TextBox?

ответ

2

Попробуйте обработать событие PreviewKeyDown; это должно произойти до TextBox имел возможность обработать ключ.

В зависимости от того, хотите ли вы TextBox также обрабатывать клавишу пробела или нет (т.е. вставить пробел после переместили каретку), вы можете установить e.Handled в PreviewKeyDown либо true (не делать больше обработки) или false (пусть TextBox также обрабатывает клавишу пробела).

1

Попробуйте событие PreviewKeyDown вместо события KeyDown и установите для свойства 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; 
    } 
}