Keydown事件发生两次

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Keydown事件发生两次相关的知识,希望对你有一定的参考价值。

在Windows商店App上,我有这个简单的TextBox

<TextBox Name="TextBoxUser" HorizontalAlignment="Right" Width="147" Margin="20,0,0,0" KeyDown="TextBox_KeyDown" /

这有一个与之关联的KeyDown事件。

        private async void TextBox_KeyDown(object sender, KeyRoutedEventArgs e)
    {
        if (e.Key == Windows.System.VirtualKey.Enter)
        {
           Debug.WriteLine("LA");
        }
    }

这个函数的输出是:

THE THE

虽然我只按一下Enter键,但它会打印2次。任何原因或我做错了什么?

答案

这是Windows RT中的已知错误。您可以通过检查Key RepeatCount来处理它

if (e.KeyStatus.RepeatCount == 1)
{
   //Execute code
}
另一答案

我终于意识到KeyDown事件中可能存在一个错误。

当我设置时,正如@daniellepelley所说,

e.Handled = true;

事件仍然传播:其他按钮将拦截它,如果它们不应该。

在我的代码中,我刚用KeyUp事件替换了KeyDown事件,一切正常(始终将Handled设置为True值)!

另一答案
void onKeyPressEvent(object sender, KeyEventArgs e)
{
  if(e.Handled)
  return;

  {
    //
    // the block of codes to be executed on the key press
    // should added here.
    //
  }
  e.Handled = true;
}

以上是关于Keydown事件发生两次的主要内容,如果未能解决你的问题,请参考以下文章

vue框架设计中的防抖函数

WinForm中的键盘按键 KeyDown,KeyPress和KeyUp事件

VueJs keydown事件堆积起来

jQuery - 按回车键触发跳转

Android片段生命周期:onResume调用了两次

keyup、keydown 和 keypress 事件在移动设备上不起作用