如何在Winforms TextBox中每次按键后获取当前文本

本文关键字:获取 文本 Winforms TextBox | 更新日期: 2023-09-27 18:21:14

当用户键入TextBox时,我正在尝试筛选ListView中的项目列表,并且我使用KeyDownKeyPress事件,但当我读取textbox.Text时,它总是在最后一次按键之前返回文本。有没有一种方法可以在不按回车键的情况下始终获得TextBox中显示的内容?

如何在Winforms TextBox中每次按键后获取当前文本

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

在Text属性值更改时发生。

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

您可以使用有问题的TextBox的TextChanged事件。我认为KeyUp活动也可以。

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

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

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

使用KeyPressEventArgs.KeyChar属性。

 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 + "");

您可以尝试KeyPress事件:

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