c# - TextBox 更新后的 KeyUp 事件

标签 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

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

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

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

最佳答案

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

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

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

关于c# - TextBox 更新后的 KeyUp 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11420030/

相关文章:

c# - MVVM 最佳实践 : communication between view models

c# - 如何在C#中使用泛型执行此操作

c# - 如何在具有相同参数的两个不同操作方法之间进行路由

c# - 带有支持所有方向的动画的扩展器

wpf - 将 ListBox 绑定(bind)到另一个 ListBox

c# - 在两个单独的屏幕上加载两个窗口

vb.net - 此处不能使用 '?'字符

.net-4.0 - 重新托管 Workflow 4 Designer 将 foreach 事件添加到工具箱

c# - 防止使用 ClickOnce 部署调试版本

c# - asp.net 它自动运行我的 C# 方法