2017-05-25 53 views
0

我目前有一個NotifyIcon作爲Windows窗體應用程序的一部分。我想通過雙擊圖標來顯示/隱藏表格,並在單擊時顯示氣球提示。我有兩個功能單獨工作,但我找不到一種方法讓應用程序區分單擊和雙擊。現在,它將雙擊視爲兩次點擊。區分C#中的Click和DoubleClick事件

如果檢測到第二次點擊,是否有辦法阻止單擊事件?

+3

在勝利形式的應用程序中有一個鼠標doubleclick事件!你可以有兩個事件,一個用於鼠標點擊,另一個用於鼠標雙擊,並在那裏處理單獨的邏輯。 –

+0

這正是我現在正在做的事情,但即使雙擊,單擊事件處理程序也會觸發。 –

+0

這只是在調試模式下還是在運行模式下?如果這是處於調試模式,並且您在click事件中設置了斷點,則調試器不會等待您的雙擊。如果是這種情況,請嘗試從click事件中刪除斷點,並將其設置爲雙擊事件 –

回答

3

有2種不同的事件。

點擊/的DoubleClick

鼠標點擊/ MouseDoubleClick

第2只EventArgs的傳遞而在MouseEventArgs這將可能讓你更多的信息,以確定事件是否是雙擊的第二次。

所以你可以做類似的事情;

obj.MouseClick+= MouseClick; 
obj.MouseDoubleClick += MouseClick; 
// some stuff 

private void MouseClick(object sender, MouseEventArgs e) 
{ 
    if(e.Clicks == 2) { // handle double click } 
} 
1

不幸的是MouseClick事件的處理建議不適合NotifyIcon類工作 - 在我的測試中e.MouseClicks始終爲0,這也可以從reference source可以看出。

相對簡單的方法,我看到的是通過使用窗體級標誌以延遲Click事件的處理,async處理器和Task.Delay

bool clicked; 

private async void OnNotifyIconClick(object sender, EventArgs e) 
{ 
    if (clicked) return; 
    clicked = true; 
    await Task.Delay(SystemInformation.DoubleClickTime); 
    if (!clicked) return; 
    clicked = false; 
    // Process Click... 
} 

private void OnNotifyIconDoubleClick(object sender, EventArgs e) 
{ 
    clicked = false; 
    // Process Double Click... 
} 

唯一的缺點是,在我的環境中的處理Click延遲了半秒(DoubleClickTime是500毫秒)。