2012-07-10 29 views
2

考虑WPF这个基本TextBoxKeyUp事件后文本框已经被更新

<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已经textBox1.Text处理关键时候Ë):

t; T 
tes; E 
test; S 
test; T 

我要处理的正确e.Key(最后按下)。在我看来,事件并没有像TextBox.Text财产一样快地更新。有没有办法解决这个问题?

回答

5

您看到此行为的原因是因为在KeyDown事件发生后不久就更新了TextBox的内容。当打字速度非常快这是可能做到这一点按以下顺序

  • 的KeyDown:T
  • KEYUP:T
  • 的KeyDown:电子
  • 的KeyDown:S
  • KEYUP:电子
  • KEYUP :S

如果要处理在中按下的最后一个键0事件,您将不得不听KeyDown并将值存储在事件之间的某处。我不会推荐这种做法,因为您可以通过许多不可预料的命令获得关键事件(特别是在非英语键盘上)。我会坚持在KeyDownKeyUp处理事件。

+0

感谢您的帮助,JaredPar。 – mgottschild 2012-07-11 12:03:30

相关问题