2011-09-17 60 views
4

我在我的程序中有一個NotifyIcon,它在任務欄中顯示氣球提示。我寫代碼作爲使可見baloonTipText直到被點擊

notifyIcon1.Icon = new Icon(SystemIcons.Application, 40, 40); 
notifyIcon1.Visible = true; 
notifyIcon1.Text = "Test Notify Icon Demo"; 
notifyIcon1.BalloonTipText =count+ " Alerts"; 
notifyIcon1.BalloonTipIcon = ToolTipIcon.Info; 
notifyIcon1.BalloonTipTitle = "Alert!"; 
notifyIcon1.ShowBalloonTip(999999999); 

的氣球前端在設定時間(999999999)後不可見。但我想顯示氣球提示,直到它被點擊,因爲我有baloontipclicked事件。

如何讓baloontip永遠可見?

+1

可能的重複http://stackoverflow.com/questions/2920029/c-notifyicon-showballoontip-timeout。無法完成。如果用戶處於活動狀態(默認Windows行爲)在特定超時後淡出(鍵盤和鼠標活動 - > http://msdn.microsoft.com/en-us/library/ms160064.aspx) –

+1

shell已強制執行有關此規則的規則。超時不會開始滴答滴答,直到它有一些跡象表明用戶*可能*已經看到它,並且它不能做得太長。如果你想要一個永久的通知,那麼你不應該使用氣球提示。常規的最頂層的形式是最好的,否則不能保證它可以與其他最頂層的窗口競爭。 –

回答

7

從MSDN:

最小和最大超時值由操作 系統執行,典型地是10和30秒,分別,然而,這可以 根據操作系統的不同而不同。 太大或太小的超時值被調整爲適當的最小值或 的最大值。另外,如果用戶似乎沒有使用計算機(沒有發生鍵盤或鼠標事件),那麼系統在這段時間內不計入超時。

似乎不可能覆蓋最大超時(最終由Windows調整和限制爲30秒,即使您指定一個較長的一個),所以該通知將消失,不會等你點擊它2分鐘後。

如果你想真的有不同的行爲,你應該使用別的東西,其他對象或模擬類似的東西,你可以完全控制行爲,你可以顯示,隱藏和關閉碼。

7

如果尚未點擊,您可以再次顯示。 你有關閉事件(BalloonTipClosed),如果用戶沒有彈出它只是再次顯示它。

private void ShowBalloonTip(int minutes) { 
    notifyIcon.BalloonTipIcon = ToolTipIcon.Error; 
    notifyIcon.BalloonTipText = "Text"; 
    notifyIcon.BalloonTipTitle = "Title"; 
    notifyIcon.ShowBalloonTip(minutes* 60 * 1000); 
    m_showUntil = DateTime.Now.AddMinutes(minutes); 
} 


private void notifyIcon_BalloonTipClosed(object sender, EventArgs e) { 
    if (m_showUntil > DateTime.Now) 
     notifyIcon.ShowBalloonTip(60 * 1000); 
} 
private void notifyIcon_BalloonTipClicked(object sender, EventArgs e) { 
    m_showUntil = DateTime.MinValue; 
    (..) 
} 
+0

+1這個作品就像一個魅力。 –

+0

只是一個小問題。如果此時打開另一個通知,則會使應用程序處於未響應狀態。考慮將這段代碼應用於其代碼的人員應該對其進行編輯,以限制同時只有一個通知。 –

相關問題