覆盖TextBox中的默认键行为

时间:2010-01-21 12:57:41

标签: .net wpf textbox keypress

我刚刚在TextBox中实现了一个快速自动完成功能,可以从一个相当小的列表中拉出一个字符串并“完成”该单词。 TextBox插入符号位于最后一个按键所在的位置,并且用户尚未键入的单词部分将突出显示,这样开始键入其他内容将删除输入的此部分。

粘贴器是我需要它,以便在完成和部分突出显示时,空格键作为“接受”键 - 例如它将插入符号移动到完成的单词的末尾。然而,无论我似乎做什么,击中空格都会删除单词中突出显示的部分(用空格字符替换它,就像你击中任何其他键一样)。

我试过这个:

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

但是当这个“有用”时,它会在之后被解雇空格键已经拆除了一个短语的最佳部分。是否有任何方法可以在键入TextBox之前捕获按键?

2 个答案:

答案 0 :(得分:2)

尝试处理PreviewKeyDown事件;它应该在之前发生 TextBox有机会处理密钥。

根据您是否希望TextBox也处理空格键(即移动插入符后插入空格),可以将PreviewKeyDown中的e.Handled设置为{{1} (不再做任何处理)或true(让TextBox也处理空格键)。

答案 1 :(得分: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;
    }
}