考虑 WPF 中的这个基本 TextBox
:
<TextBox Name="textBox1" KeyUp="textBox1_KeyUp" />
事件:
using System.Diagnostics;
...
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{ Debug.WriteLine(textBox1.Text + "; " + e.Key.ToString()); }
如果我在 TextBox
中慢速输入,输出为:
t; T
te; E
tes; S
test; T
但是如果我快速键入,输出是错误的(注意 S 在处理键 E 时已经在 textBox1.Text
中):
t; T
tes; E
test; S
test; T
我想处理正确的 e.Key
(最后按下的)。在我看来,该事件的更新速度不如 TextBox.Text
属性。有没有办法解决这个问题?
最佳答案
您看到此行为的原因是 TextBox
的内容在 KeyDown
事件发生后不久更新。当输入速度非常快时,可以按以下顺序进行输入
- 按键:T
- 按键:T
- 按键:E
- 按键按下:S
- 按键:E
- 按键:S
如果你想处理在 KeyUp
事件中按下的最后一个键,你必须监听 KeyDown
并将值存储在事件之间的某处。我不建议这样做,因为您可以按许多意想不到的顺序获得关键事件(尤其是在非英语键盘上)。我会坚持在 KeyDown
或 KeyUp
中处理事件。
关于c# - TextBox 更新后的 KeyUp 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11420030/