3

我刚刚在 a 中实现了一个快速自动完成功能,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

尝试 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;
    }
}
于 2010-01-21T13:11:35.273 回答