#636 – 持续按住按键会多次触发键盘事件(Keyboard Events that Fire When A Key Is Held Down)

来源:互联网 发布:人员去向软件 编辑:程序博客网 时间:2024/06/05 00:20

在Windows系统中,持续按住一个按键,相当于重复按下多次这个键。而且PreviewKeyDown, KeyDown 和 PreviewTextInput 事件也会重复的触发。

你可以通过KeyEventArgs.IsRepeat 属性判断事件是第一次发生,还是持续按住按键重复发生的。

加入我们在一个获得键盘输入焦点的TextBox 上持续按下“a”键,并获得了三次输入,那么我们获得的事件顺序如下:

 -PreviewKeyDown, Key = A, IsRepeat = False

 -KeyDown, Key = A, IsRepeat = False

 -PreviewTextInput, Text = a

 -(TextBox 显示一个“a”)

 -PreviewKeyDown, Key = A, IsRepeat = True

 -KeyDown, Key = A, IsRepeat = True

 -PreviewTextInput, Text = a

 -(TextBox 显示“aa”)

 -PreviewKeyDown, Key = A, IsRepeat = True

 -KeyDown, Key = A, IsRepeat = True

 -PreviewTextInput, Text = a

 -(TextBox  显示“aaa”)

 -PreviewKeyUp, Key = A, IsRepeat = False

 -KeyUp, Key = A, IsRepeat = False

如果想要防止这钟持续按下会多次触发事件的情况,可以在IsRepeat 属性为true的时候设置事件的Handled 属性为true。

例如,在XAM注册事件:

<TextBox HorizontalAlignment="Center" Width="150" Margin="10"         PreviewKeyDown="TextBox_PreviewKeyDown" />

然后事件处理函数代码中加上:

private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e){    e.Handled = e.IsRepeat;}

原文地址:https://wpf.2000things.com/2012/08/30/636-keyboard-events-that-fire-when-a-key-is-held-down/



0 0
原创粉丝点击