【问题标题】:How to get the current text after each key press in a Winforms TextBox?Winforms TextBox中每次按键后如何获取当前文本?
【发布时间】:2012-01-21 18:19:08
【问题描述】:

我正在尝试过滤ListView 中的项目列表,因为用户键入TextBox 并且我使用KeyDownKeyPress 事件但是当我阅读textbox.Text 时,它总是返回最后一次按键之前的文本。有没有办法在不按 Enter 的情况下始终获取 TextBox 中显示的任何内容?

【问题讨论】:

    标签: c# .net winforms textbox


    【解决方案1】:

    使用TextBox.TextChanged 事件(继承自Control)。

    在 Text 属性值更改时发生。

    我的建议是尽量不要使用关键事件(向下/按下/向上)来破解它 - 还有其他方法可以更改文本框的文本,例如从右键单击上下文菜单中粘贴文本。这不涉及按键。

    【讨论】:

    • 谢谢,不知何故,我认为 textchanged 只会在输入、焦点更改等时触发。
    【解决方案2】:

    您可以使用相关文本框的TextChanged 事件。我认为KeyUp 事件可能也会起作用。

    【讨论】:

      【解决方案3】:

      关于实际的原始问题,先前的答案是不完整的:当用户刚刚按下一个键(包括该按键)时,如何检索 Text 属性的内容?

      KeyUp 事件恰好在 AFTERText 属性的内容实际更改后触发,因此使用此特定事件顺序,您可以检索文本内容的最新值使用KeyUp 事件处理程序。

      KeyPress 事件不起作用,因为它在Text 属性更改之前被触发。

      【讨论】:

        【解决方案4】:

        【讨论】:

          【解决方案5】:
           public static string NextControlValue(string originalValue, int selectStart, int selectLength, string keyChar)
              {
                  if (originalValue.Length > selectStart)
                  {
                      if (selectLength > 0)
                      {
                          originalValue = originalValue.Remove(selectStart, selectLength);
                          return NextControlValue(originalValue, selectStart, 0, keyChar);
                      }
                      else
                      {
                          return originalValue.Insert(selectStart, keyChar);
                      }
                  }
                  else
                  {
                      return originalValue + keyChar;
                  }
          
              }
          
          var previewValue = NextControlValue(textbox.Text, textbox.SelectionStart, textbox.SelectionLength, e.KeyChar + "");
          

          【讨论】:

            【解决方案6】:

            您可以尝试 KeyPress 事件:

            int position = textBox1.SelectionStart;
            string changedText = textBox1.Text.Insert(position, e.KeyChar.ToString());
            

            【讨论】:

              猜你喜欢
              • 2012-11-29
              • 1970-01-01
              • 1970-01-01
              • 2015-09-28
              • 2011-09-12
              • 1970-01-01
              • 1970-01-01
              • 2015-04-22
              • 2021-10-13
              相关资源
              最近更新 更多