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()); }

TextBox出力に slow と入力すると、次のようになります。

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

しかし、速く入力すると、出力が間違っています (キーEを処理するときにSが既に含まれていることに注意してください)。textBox1.Text

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またはでイベントを処理することに固執しKeyUpます。

于 2012-07-10T19:02:49.963 に答える