2013-01-07 88 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 

    }