2013-01-07 85 views
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)总是如此。 我该怎么做才能让它不是自动的?

+1

这是哪一项技术? WinForms或WPF? – Spontifixus

+0

抱歉忘了提。这是winforms –

+0

当你停止点击时,应用程序如何知道?暂停长度,鼠标移出面板,键盘事件?或者你在说双击? – mcalex

回答

0

由于您有两次点击,您实际上最终会收到2次点击事件。如果您正在寻找模拟双击功能或类似的东西,并且doubleclick事件不适合您,我会将有关第一次点击的数据以及日期时间存储到某些类作用域变量中,然后与第二次点击期间的日期时间进行比较。

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; 
     } 
    } 
} 
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 

    }