如何判断系统托盘中的气球提示是否已关闭?

时间:2009-05-28 23:17:04

标签: vb.net notifyicon balloon

我有一个应用程序,它使用托盘中的NotifyIcon来隐藏/恢复应用程序,以及向应用程序事件的用户弹出通知。我的应用程序有一个通知队列,我使用NotificationIcon.BalloonTipClosed事件来确定何时重置气球并显示下一个通知(如果队列中有一个)。

这种方法似乎在两种常见原因都很有效(用户让气球在超时时自动关闭,用户点击气球中的“X”以强制它关闭),但是第三种情况是BalloonTipClosed没有被叫:

  1. 弹出通知气球
  2. 当它可见时,用户右键单击通知图标以显示上下文菜单,导致气球消失
  3. 在这个实例中没有触发BalloonTipClosed事件 - 我认为它是框架中的一个错误(我使用的是2.0),但是有人对此有所了解吗?如果我没有得到这个事件,我的应用程序总是认为有一个气球可见(我有一个布尔值,阻止它一次显示多个气球),并且它永远不会再显示另一个图标,只要它正在运行。

4 个答案:

答案 0 :(得分:3)

这属于对Aarons回答的评论,但我不允许发表评论。

如果您处理NotifyIcon上的BalloonTipClicked和MouseClick事件(以及BalloonTipClosed),那么您可以捕获气球可以关闭的所有方式。你必须要注意的是,有几个场景会触发多个事件,所以一定要编写代码(比如isClosed = true,然后在显示新气球时重置)。

答案 1 :(得分:0)

在BalloonTipClicked事件的事件处理程序中,我会检查是否单击了鼠标右键,以及是否将布尔值设置为false。

答案 2 :(得分:0)

这是我最终做的事情,尽管我并不特别喜欢这个解决方案。我在表单中添加了第二个计时器并将其设置为10秒。当弹出一个通知时(当我弹出一个)时,我启动计时器,然后在BalloonTipClosed中,我停止它。如果计时器滴答(意味着BalloonTipClosed尚未运行),我会手动显示下一个提示。

结果是,如果它还没有被解雇,我会照顾它。但是,如果有人有解决方案,我愿意接受更好的解决方案。

答案 3 :(得分:0)

我认为Raymond Chen关于气球通知的这篇文章可能会对你有所帮助: http://blogs.msdn.com/oldnewthing/archive/2009/05/04/9585032.aspx