2009-05-28 105 views
5

我有一個應用程序在托盤中使用NotifyIcon來隱藏/恢復應用程序,並嚮應用程序事件的用戶彈出通知。我的應用程序有一個通知隊列,我使用NotificationIcon.BalloonTipClosed事件來確定何時重置氣球並顯示下一個通知(如果隊列中有一個)。如何判斷系統托盤中的氣球提示是否已關閉?

這種方法似乎在兩種常見原因中都很有效(用戶可以在氣球超時時關閉氣球,用戶單擊氣球上的「X」強制氣球關閉),但還有第三種情況,其中BalloonTipClosed不會「噸得到所謂:

  1. 通知氣球彈出
  2. 雖然這是明顯的,在通知圖標用戶單擊右鍵,彈出快捷菜單,從而造成球囊消失

的BalloonTipClosed事件沒有按」在這裏觸發實例 - 我認爲這是一個框架中的錯誤(我使用2.0),但有沒有人有這個想法?如果我沒有得到這個事件,我的應用程序總是會認爲有一個可見的氣球(我有一個布爾值可以防止它一次顯示多個氣球),並且只要它正在運行,它就不會再顯示另一個圖標。

回答

0

這就是我最終做的事情,儘管我並不特別喜歡這個解決方案。我在窗體中添加了第二個計時器並將其設置爲10秒。當彈出通知(當我彈出一個通知)時,我啓動計時器,然後在BalloonTipClosed中停止。如果計時器打勾(表示BalloonTipClosed尚未運行),則手動顯示下一個提示。

結果是,如果它還沒有解僱,我會照顧它。不過,如果有人有解決方案,我願意提供更好的解決方案。

0

在BalloonTipClicked事件的事件處理程序中,我將檢查鼠標右鍵是否被單擊,以及是否將boolean設置爲false。

3

這屬於Aarons的迴應,但我不能評論。

如果您處理NotifyIcon(以及BalloonTipClosed)上的BalloonTipClicked和MouseClick事件,那麼您可以捕獲氣球可以關閉的所有方式。唯一需要注意的是幾個scenerios會觸發多個事件,所以一定要編碼(如isClosed = true,然後在顯示新氣球時重置)。

+0

這裏的問題是,雖然我可以捕獲icon_click事件,我知道氣球已經關閉了在這一點上,我我不確定何時顯示下一個氣球。立即顯示它將覆蓋用戶在那裏做的任何事情。我可以在點擊後的延遲時間內完成此操作,但仍然需要一個計時器,所以我寧願在所有情況下都使用計時器。 – SqlRyan 2009-06-08 20:48:08

+0

好點。假設用戶唯一可以在那裏做的事情是激活一個上下文菜單,如果你處理菜單Opening和Closed事件,並且只在沒有激活上下文菜單時才顯示下一個氣球。您可能還想根據用戶選擇的菜單項作出決定 – Bob 2009-06-09 05:28:29

相關問題