Keydown Event fires twice

17,048

Solution 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.

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

Solution 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)!

Share:
17,048
Thought
Author by

Thought

Learning

Updated on July 22, 2022

Comments

  • Thought
    Thought almost 2 years

    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?