Detect both left and right mouse click at the same time?

前端 未结 6 1804
礼貌的吻别
礼貌的吻别 2020-12-17 01:51

I\'m remaking windows Minesweeper (from XP) and something they had included was that if you click a number with as many flags as it\'s number with the left and right mouse b

6条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-12-17 02:44

    Kind of an old question, but I came across this (coincidentally also while doing a Minesweeper clone) and felt it was missing something. If you want to have the two-button click but still catch regular single-button clicks as well, you can do the following:

    private bool left_down;
    private bool right_down;
    private bool both_click;
    
    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            left_down = true;
            if (right_down)
                both_click = true;
        }
        if (e.Button == MouseButtons.Right)
        {
            right_down = true;
            if (left_down)
                both_click = true;
        }
    }
    private void Form1_MouseUp(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            if (!right_down)
            {
                if (both_click)
                    //Do both-click stuff here
                else
                    //Do left-click stuff here
                both_click = false;
            }
            left_down = false;
        }
        if (e.Button == MouseButtons.Right)
        {
            if (!left_down)
            {
                if (both_click)
                    //Do both-click stuff here
                else
                    //Do right-click stuff here
                both_click = false;
            }
            right_down = false;
        }
    }
    

    It moves the detection to the mouse-up rather than the mouse-down. It doesn't do anything until you release both buttons. This works almost exactly like the Windows 7 version of Minesweeper, except that the right button alone in the original operates on mouse-down. (I honestly prefer my version). There's a bit of redundancy in that the both-click case is called in two places depending on whether you release the left or right button first, but this should probably be a single-line function-call anyhow. Bonus: You can check the both_click flag from elsewhere in order to draw the hint-square around your cursor showing which squares will be revealed when you release the buttons.

提交回复
热议问题