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

在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/



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值