如何在Winforms TextBox中每次按键后获取当前文本
本文关键字:获取 文本 Winforms TextBox | 更新日期: 2023-09-27 18:21:14
当用户键入TextBox
时,我正在尝试筛选ListView
中的项目列表,并且我使用KeyDown
和KeyPress
事件,但当我读取textbox.Text
时,它总是在最后一次按键之前返回文本。有没有一种方法可以在不按回车键的情况下始终获得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());