[英]System Tray Icon Double / Single Click Issue
我創建了系統任務欄圖標,並添加了兩次單擊事件雙擊,單擊。 我試過鼠標單擊和正常都單擊。
SysTray.MouseClick += new MouseEventHandler(SysTray_MouseClick);
SysTray.MouseDoubleClick += new MouseEventHandler(SysTray_MouseDoubleClick);
void SysTray_MouseClick(object sender, MouseEventArgs e)
{
SingleClick = true;
if (e.Button == MouseButtons.Left)
{
System.Threading.Thread.Sleep(300);
if (SingleClick)
{
//To Do
}
}
}
void SysTray_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
SingleClick = false;
System.Threading.Thread.Sleep(20);
//To Do
}
}
如果我雙擊系統任務欄圖標,它將自動執行單擊圖標。
我如何實現雙擊/單擊問題
我知道已經有一段時間了,但是我只是使用計時器解決了這個問題:
Timer singleClickTimer = new Timer();
private void trayIcon_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
// Give the double-click a chance to cancel this
singleClickTimer.Interval = (int) (SystemInformation.DoubleClickTime * 1.1);
singleClickTimer.Start();
}
}
private void singleClickTimer_Tick(object sender, EventArgs e)
{
singleClickTimer.Stop();
// do single click here
}
private void trayIcon_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
// Cancel the single click
singleClickTimer.Stop();
// do double click here
}
}
就像漢斯在評論中說的那樣。 雙擊總是從單擊開始。 所以我向您介紹我的解決方案之一
在您的課程中,創建一個布爾值。
bool click=false;
然后為方法。
void SysTray_MouseClick(object sender, EventArge e)
{
click=true;
System.Threading.Thread.Sleep(300);//Test with this amount!!
if(click)
{
//codes go here
}
}
void Systray_DoubleClick(object sender , EventArge e)
{
System.Threading.Thread.Sleep(20);//This too!
click=false; // If it is doubleclick cancel the single click event.
//codes go here.
}
主要概念是雙擊是否取消單擊事件。 我運行了秒表,並且doubleclick應該花200-350毫秒。 因此,請調整您想要的時間。 但另一方面。 時間越多=代碼處理速度越慢
編輯:這個邏輯讓我震驚! 我最終得到了這段代碼,嘗試一下。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.