【问题标题】:MouseDown/MouseUp and Click events out of syncMouseDown/MouseUp 和 Click 事件不同步
【发布时间】:2016-03-02 23:50:38
【问题描述】:

我有一个 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();
    }
}

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

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

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

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

【问题讨论】:

  • 您有什么理由同时使用所有三个这些事件? MouseUp 是处理点击事件的惯用方式。
  • 感谢回复@CodyGray - 上面的程序只是突出了这个问题 - 我只是捕捉点击事件并注意到它们并不总是注册,所以我创建了上面的例子。当然我可以继续跟踪 MouseUp,但我想弄清楚为什么我得到了上述结果。

标签: c# winforms windows-8.1


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多