Detect when two keys are pressed at the same time

后端 未结 4 1149
北海茫月
北海茫月 2020-12-10 07:18

I have no idea how do this.

I know only how do detect one key:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys         


        
相关标签:
4条回答
  • 2020-12-10 07:49

    You have to keep track of keydown/keyup events, and keep a list of all the keys that are currently "down". The keyboard handler can only trigger on individual keys, and it's up to your code to detect/keep track of which ones are down, and if those individual keydown events are close enough to each other to be counted as "together".

    0 讨论(0)
  • 2020-12-10 07:57

    You don't need a timer XD

        bool keyup = false;
        bool keyleft = false;
    
        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Up)
            {
                keyup = true;
            }
            else if (e.KeyCode == Keys.Left)
            {
                keyleft = true;
            }
    
            if (keyleft && keyup)
            {
                Console.Beep(234, 589);
            }
        }
    
    
        private void Form1_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Up)
            {
                keyup = false;
            }
            else if (e.KeyCode == Keys.Left)
            {
                keyleft = false;
            }
        }
    
    0 讨论(0)
  • 2020-12-10 08:07

    As you can see, you can use a timer event with boolean's to detect if two keys are pressed.

        bool keyup = false;
        bool keyleft = false;
    
        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Up)
            {
                keyup = true;
            }
            else if (e.KeyCode == Keys.Left)
            {
                keyleft = true;
            }
        }
    
        private void Form1_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Up)
            {
                keyup = false;
            }
            else if (e.KeyCode == Keys.Left)
            {
                keyleft = false;
            }
        }
    
        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Start();
        }
    
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (keyleft && keyup)
            {
                Console.Beep(234, 589);
            }
        }
    
    0 讨论(0)
  • 2020-12-10 08:12

    put a break point in your key down event and press your two keys together.
    examine the KeyData of the KeyEventArgs. it will show you what you have to use to detect two keys pressed together. Use some dummy code like this:

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        MessageBox.Show("KeyData is: " + e.KeyData.Tostring());
    }
    

    like I have done for shift and r pressed together

    e.KeyData = R | Shift

    0 讨论(0)
提交回复
热议问题