2

考虑TextBoxWPF 中的这个基础:

<TextBox Name="textBox1" KeyUp="textBox1_KeyUp" />

和事件:

using System.Diagnostics;
...
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{ Debug.WriteLine(textBox1.Text + "; " + e.Key.ToString()); }

如果我在输出中输入 slowTextBox是:

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

但是如果我快速输入,输出是错误的(注意S已经在textBox1.Text处理键E时):

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

我想处理正确e.Key的(最后按下)。在我看来,该事件的更新速度不如该TextBox.Text属性。有没有办法解决这个问题?

4

1 回答 1

5

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

  • 按键:T
  • 按键:T
  • 按键:E
  • 按键:S
  • 按键:E
  • 按键:S

如果要处理事件中按下的最后一个键,则KeyUp必须在事件之间的某处收听KeyDown并存储该值。我不建议这样做,因为您可以获得许多您意想不到的关键事件(尤其是在非英语键盘上)。KeyDown我会坚持在or中处理事件KeyUp

于 2012-07-10T19:02:49.963 回答