【问题标题】:Overriding default key behaviour in a TextBox覆盖 TextBox 中的默认键行为
【发布时间】:2010-01-21 12:57:40
【问题描述】:

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

坚持者是我需要这样,在完成和部分突出显示时,空格键用作“接受”键 - 例如它将插入符号移动到完成的单词的末尾。但是,无论我似乎做什么,按空格都会删除单词的突出显示部分(用空格字符替换它,就像您按任何其他键一样)。

我试过这个:

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

但是,当这个“有效”时,它会在 空格键破坏了短语的最佳部分之后被触发。有什么方法可以在输入TextBox 之前捕获按键?

【问题讨论】:

    标签: .net wpf textbox keypress


    【解决方案1】:

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

    根据您是否希望 TextBox 也处理空格键(即在移动插入符号后插入空格),您可以将 PreviewKeyDown 中的 e.Handled 设置为 true (不要这样做更多处理)或false(也让 TextBox 处理空格键)。

    【讨论】:

      【解决方案2】:

      尝试使用 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;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-10
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多