1

我对可能是一个简单的解决方案有疑问,但我只是没有做对。因此,如果我按下鼠标左键,我希望发生一些事情。

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

所以,这很好用。但现在问题来了。现在我想检查点击事件中的更多点击(现在我考虑了一下,这是否可能?)像这样:

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

4 回答 4

4

这不会按照您实现它的方式解决,因为在该处理程序中您仍然处理单击鼠标事件。

请尝试处理Control.DoubleClick 事件

于 2013-01-07T13:00:14.050 回答
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;
       }
   }
}
于 2013-01-07T13:02:34.737 回答
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

    }
于 2014-02-19T00:38:35.070 回答
0

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

于 2013-01-07T13:02:21.950 回答