Keydown Event fires twice

那年仲夏 提交于 2019-12-07 02:02:58

问题


On a Windows store App, I have this simple TextBox

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

That has a KeyDown Event associated with it.

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

And the output of this function is:


LA
LA

although I press Enter only once, it prints 2 times. Any reason for that or am I doing something wrong?


回答1:


This should only fire the event once, so if it is firing twice I would check a couple of things.

Check that you aren't handling the key down event on a parent control. This could be a panel or the containing window. Events will bubble down through the visual tree. For example a key down on a textbox will also be a keydown on the window containing the textbox.

To stop this happening you can mark the event as handled as below;

e.Handled = true;

The other thing to check is that you aren't subscribing to the event twice. The XAML will do the same as;

TextBoxUser.KeyDown += TextBox_KeyDown

so check that you don't have this in your code behind.

You can check the sender and e.OriginalSource property to see where the event is being fired from.




回答2:


This is a known bug in Windows RT.You can handle it by checking the Key RepeatCount `

if (e.KeyStatus.RepeatCount == 1)
{
   //Execute code
}



回答3:


I finally realized that there is probably a bug in the KeyDown event.

When I set, as @daniellepelley said,

e.Handled = true;

the event still propagates: other buttons will intercept it, also if they shouldn't.

In my code, I just replaced KeyDown event with KeyUp event and everything works fine (always setting Handled to True value)!




回答4:


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


来源:https://stackoverflow.com/questions/22012948/keydown-event-fires-twice

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!