MouseDown / MouseUp和Click事件不同步

时间:2016-03-02 15:34:11

标签: c# winforms windows-8.1

我有一个winforms应用程序,可以捕获MouseDown,MouseUp和Click事件。

慢慢点击表格(每秒钟一次),事件计数器保持同步。

快速点击,向下/向上事件记录保持跟踪,但点击事件记录落后:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }
    private int clicks = 0;
    private void Form1_MouseClick(object sender, MouseEventArgs e)
    {
        clicks++;
        textBox1.Text = clicks.ToString();
    }

    private int mdown=0;
    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
        mdown++;
        textBox2.Text = mdown.ToString();
    }
    private int mup = 0;
    private void Form1_MouseUp(object sender, MouseEventArgs e)
    {
        mup++;
        textBox3.Text = mup.ToString();
    }
}

enter image description here

阅读文档:https://msdn.microsoft.com/en-us/library/ms171542.aspx这似乎不可能 - 我错过了一些明显的东西

(当使用触控板按钮或外接蓝牙鼠标时会发生这种情况,所以希望这是一个编程错误而不是机器的问题。)

EDIT Damien当然是正确的,跟踪双击也一切都保持同步:

    private void Form1_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        clicks++;
        textBox1.Text = clicks.ToString();
    }

1 个答案:

答案 0 :(得分:4)

因为有时你点击的速度足够快,所以你会触发双击。请考虑您链接到的文档页面中的序列:

  

以下是为双击鼠标按钮而引发的事件顺序:

     
      
  1. MouseDown事件。
  2.   
  3. 点击活动。
  4.   
  5. MouseClick事件。
  6.   
  7. MouseUp事件。
  8.   
  9. MouseDown事件。
  10.   
  11. DoubleClick事件。 (这可能会有所不同,具体取决于相关控件是否将StandardDoubleClick样式位设置为true。有关如何设置ControlStyles位的详细信息,请参阅SetStyle方法。)
  12.   
  13. MouseDoubleClick事件。
  14.   
  15. MouseUp事件。
  16.   

请注意,该序列中MouseDown / MouseUp个事件的数量是MouseClick个事件的两倍。