2013-12-16 29 views
5

我們使用NotifyIcon在用戶收到需要注意的新消息時提醒用戶。如果其他人首先收到消息,通知圖標應該再次隱藏,但是我在解決如何從後面的代碼關閉氣球時遇到問題。如何從代碼中關閉NotifyIcon BallonToolTip?

我的代碼看起來是這樣的:

myNotifyIcon.ShowBalloonTip(2000, title, message, icon); 

我曾嘗試建議發現here,但沒有一個是合適的。

  • 使用myNotifyIcon.Visible = true不隱藏它

  • 使用myNotifyIcon.Visible = false; myNotifyIcon.Visible = true;將隱藏它,但它也隱藏在托盤中的圖標,並且當被再次示出,但是它顯示了一個不同的位置。

  • myNotifyIcon.Show(0)不是一個有效的方法

  • myNotifyIcon.ShowBalloonTip(0)myNotifyIcon.ShowBalloonTip(1)不會顯示爲氣球工作只是被顯示並沒有出現去自行消失的。

我讀this question有關使用WinAPI的查找窗口,併發送一個WM_CLOSE消息,但我也不太清楚該怎麼做可靠。

如何從後面的代碼關閉NotifyIcon

+0

OMG Rachel你在做winforms的東西嗎? –

+0

您是否嘗試過notifyIcon.Icon = null; – techno

+1

本機winapi函數不支持它。粗略的解決方法是處置NotifyIcon。 –

回答

1

我從來沒有找到一個非hacky的方式來做到這一點。文檔說:

最小和最大超時值由操作 系統分別執行,典型地是10到30秒,但是本 可以根據操作系統的不同而不同。 太大或太小的超時值被調整爲適當的最小值或 的最大值。

即使這沒有具體解決的明確關閉氣囊的問題,它表明我,ShowBalloonTip()方法的調用者根本沒有完全控制氣球,一旦它被證明。

我發現最好的辦法是,你已經提到一個:

myNotifyIcon.Visible = false; 
myNotifyIcon.Visible = true; 

不理想,但它的工作原理。另一個想法是更改氣球中顯示的消息,以指示先前的消息已過時:

myNotifyIcon.ShowBalloonTip(2000, "Title", "Never mind!", ToolTipIcon.Info); 
0

有一種簡單的方法可以做到這一點。

myNotifyIcon.ShowBalloonTip(2000); 
myNotifyIcon.visible = true; 
this.Hide(); 

試試這個,它肯定會100%。