检测多个鼠标单击

时间:2013-01-07 12:54:52

标签: c# winforms button click mouse

我有一个问题,可能是一个简单的解决方案,但我只是不正确。 所以如果我按下鼠标左键,我想要发生一些事情。

private void DrawingPanel_MouseClick(object sender, MouseEventArgs e)
{  
  if (e.Button == MouseButtons.Left)
  {
   //something happens
  }
}

所以,这很好。但现在问题来了。现在我想检查click事件中的更多点击(现在我想到了,甚至可能吗?) 像这样:

private void DrawingPanel_MouseClick(object sender, MouseEventArgs e)
{  
  if (e.Button == MouseButtons.Left)
  {
   //something happens
   //blabla...
   if (e.Button == MouseButtons.Left)
   {
    //Do something
   }
  }
}

这样的事情可能吗?因为第二个if (e.Button == MouseButtons.Left)总是如此。 我怎么能这样做,以至于它不是自动真实的?

4 个答案:

答案 0 :(得分:4)

这不会影响您实现它的方式,因为在该处理程序中您仍然可以处理一个鼠标单击事件。

尝试改为处理Control.DoubleClick-event

答案 1 :(得分:1)

每次点击都会重新输入MouseClick个事件(不考虑双击) 如果您尝试为多次单击过程创建逻辑,一个简单的解决方案是在您的班级上维护一个点击计数器:

private int clickNo = 0;

private void DrawingPanel_MouseClick(object sender, MouseEventArgs e)
{  
   if (e.Button == MouseButtons.Left)
   {
       clickNo++;
       switch (clickNo)
       {
           case 1: Foo(); break;
           case 2: Bar(); break;
           case 3: Baz(); clickNo = 0; break;
       }
   }
}

答案 2 :(得分:0)

您实际上最终会有2次点击事件,因为您有两次点击。如果您希望模拟双击功能或类似的东西,并且双击事件对您不起作用,我会将有关第一次单击的相关数据以及日期时间存储到某些类范围的变量和与第二次点击期间的日期时间进行比较。

答案 3 :(得分:0)

以下模拟具有有限时间跨度的双击以执行两次单击。这种情况是300毫秒。 DoubleClick事件也有效,但只传递EventArgs而不是MouseEventArgs,严重限制了它的使用。

    private int _clicks = 0;
    private void DoWhateverOnDoubleClick(object sender, MouseEventArgs e)
    {
        if(e.Button != MouseButtons.Left)return; // We want left clicks only
        if (++_clicks == 2) 
            DoWhatever(); // if double click then do whatever
        Task.Run(() =>
        {
            Thread.Sleep(300);
            _clicks = 0;
        }); // Reset clicks after 300 ms

    }