TextBox已更新后的KeyUp事件

时间:2012-07-10 18:58:03

标签: c# wpf .net-4.0 textbox wpf-controls

在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属性快。有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:5)

您看到此行为的原因是因为TextBox事件发生后不久就会更新KeyDown的内容。键入速度非常快时,可以按以下顺序进行操作

  • KeyDown:T
  • KeyUp:T
  • KeyDown:E
  • KeyDown:S
  • KeyUp:E
  • KeyUp:S

如果要处理在KeyUp事件中按下的最后一个键,则必须侦听KeyDown并将值存储在事件之间的某处。我不会推荐这一点,因为你可以在许多订单中获得关键事件,你不会期望(特别是在非英语键盘上)。我会坚持在KeyDownKeyUp处理此事件。