2012-05-07 64 views
2

我需要區分單擊和雙擊,但我需要在點擊事件期間執行此操作。我需要這個,因爲如果有一個單擊我想調用函數A,並且如果有雙擊,我想調用函數B.但函數A只能在單擊時調用。我怎樣才能在C#(或VB)中使用標準Winforms來實現這一點?如何處理WinForms控件點擊事件,當它不是雙擊時

回答

3
+2

即使雙擊也會點擊。 – Daniel

+1

有沒有簡單的方法。 以下是通過處理MouseDown事件區分點擊和dblclick的示例:http://msdn.microsoft.com/en-us/library/ms171543(v=vs.80).aspx – Tilak

+0

我最終使用此鏈接稍作修改。謝謝。 – Daniel

3

您需要點擊後使用計時器等待「一定的時間」事件來確定點擊是否是單擊。您可以使用SystemInformation.DoubleClickTime屬性來確定系統認爲連續點擊雙擊的最大點擊時間間隔。你可能想爲此添加一點填充。

在您的點擊處理程序中,增加點擊計數器並啓動計時器。在雙擊處理程序中,設置一個標誌來表示發生雙擊。在計時器處理程序中,檢查是否引發了雙擊事件。如果沒有,這是一個單一的點擊。

事情是這樣的:

private bool _doubleClicked = false; 
private Timer _clickTrackingTimer = 
    new Timer(SystemInformation.DoubleClickTimer + 100); 


private void ClickHandler(object sender, EventArgs e) 
{ 
    _clickTrackingTimer.Start(); 
} 

private void DoubleClickHandler(object sender, EventArgs e) 
{ 
    _doubleClicked = true; 
} 

private void TimerTickHandler(object sender, EventArgs e) 
{ 
    _clickTrackingTimer.Stop(); 

    if (!_doubleClicked) 
    { 
     // single click! 
    } 

    _doubleClicked = false; 
} 
+0

這是一個好主意。非常感謝! – Daniel

+0

不幸的是DoubleClickHandler從未被解僱。 – Daniel

+1

代替_doubleClicked標誌,另一個選項是通過遞增計數器,然後清除計時器處理程序中的計數器來計算ClickHandler中的點擊次數。 – roken

0

另一個選項是創建從按鈕派生的自定義控制,然後調用SetStyles()方法,該方法是在構造一個受保護的方法),然後設置的ControlStyles國旗

class DoubleClickButton : Button 
{ 
    public DoubleClickButton() : base() 
    { 

     SetStyle(ControlStyles.StandardDoubleClick, true); 
    } 
}