代码之家  ›  专栏  ›  技术社区  ›  Steve

MouseDown/MouseUp和Click事件不同步

  •  2
  • Steve  · 技术社区  · 9 年前

    我有一个winforms应用程序,可以捕捉鼠标向下、鼠标向上和点击事件。

    缓慢单击表单(每秒一次左右),事件计数器保持同步。

    快速单击,向下/向上事件计数保持跟踪,但单击事件计数落后:

    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 这似乎不可能-我是不是遗漏了一些明显的东西

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

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

        private void Form1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            clicks++;
            textBox1.Text = clicks.ToString();
        }
    
    1 回复  |  直到 9 年前
        1
  •  4
  •   Community CDub    4 年前

    因为有时你的点击速度快到足以触发双击。考虑您链接到的文档页面的顺序:

    以下是鼠标双击引发的事件顺序:

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

    请注意 MouseDown / MouseUp 事件的顺序 MouseClick 事件。