.net - 覆盖文本框中的默认按键行为

标签 .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 之前,有什么方法可以捕获按键吗?

最佳答案

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

根据您是否希望 TextBox 也处理空格键(即在移动插入符号后插入空格),您可以设置 e.Handled在 PreviewKeyDown 中设置为 true(不再进行任何处理)或 false(让 TextBox 也处理空格键)。

关于.net - 覆盖文本框中的默认按键行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2109295/

相关文章:

c# - .gitignore 和 Visual Studio 项目 : Ignore bin/Debug directory but not bin/Release directory

javascript - 如何将文本框值作为 href 的一部分传递

.net - 使用 C# 中的高级矩阵库计算 C# 中的特征向量。网

c# - 如何通过 C# 使用 Web 服务端点

c# - WPF-WrapPanel 中的截止问题

c# - SciChart FastLineRenderableSeries 抗锯齿不起作用

c# - 为什么我的应用程序图标不透明?

c# - 从sql查询中获取数据到文本框中

textbox - 法罗小话 : How to create an input field using TextMorph and then get the data off the input field?

c# - 如何将歌曲的持续时间格式化为分钟和秒?