我有一个应用程序,它使用托盘中的NotifyIcon来隐藏/恢复应用程序,以及向应用程序事件的用户弹出通知。我的应用程序有一个通知队列,我使用NotificationIcon.BalloonTipClosed事件来确定何时重置气球并显示下一个通知(如果队列中有一个)。
这种方法似乎在两种常见原因都很有效(用户让气球在超时时自动关闭,用户点击气球中的“X”以强制它关闭),但是第三种情况是BalloonTipClosed没有被叫:
在这个实例中没有触发BalloonTipClosed事件 - 我认为它是框架中的一个错误(我使用的是2.0),但是有人对此有所了解吗?如果我没有得到这个事件,我的应用程序总是认为有一个气球可见(我有一个布尔值,阻止它一次显示多个气球),并且它永远不会再显示另一个图标,只要它正在运行。
答案 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