在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
但如果我输入快,输出错误(注意处理键 E 时textBox1.Text
中的 S ):
t; T
tes; E
test; S
test; T
我想处理正确的e.Key
(最后一次按下)。在我看来,事件的更新速度不如TextBox.Text
属性快。有没有办法解决这个问题?
答案 0 :(得分:5)
您看到此行为的原因是因为TextBox
事件发生后不久就会更新KeyDown
的内容。键入速度非常快时,可以按以下顺序进行操作
如果要处理在KeyUp
事件中按下的最后一个键,则必须侦听KeyDown
并将值存储在事件之间的某处。我不会推荐这一点,因为你可以在许多订单中获得关键事件,你不会期望(特别是在非英语键盘上)。我会坚持在KeyDown
或KeyUp
处理此事件。