5

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

此方法似乎在两种常见原因中都非常有效(用户让气球在超时时自行关闭,并且用户在气球中单击“X”以强制其关闭),但还有第三种情况,即 BalloonTipClosed 没有被调用:

  1. 弹出通知气球
  2. 当它可见时,用户右键单击通知图标以调出上下文菜单,导致气球消失

在这种情况下,BalloonTipClosed 事件不会被触发 - 我认为这是框架中的一个错误(我使用的是 2.0),但有人对此有想法吗?如果我没有收到此事件,我的应用程序总是认为有一个可见的气球(我有一个布尔值阻止它一次显示多个气球),并且只要它正在运行,它就永远不会再显示另一个图标。

4

4 回答 4

3

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

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

于 2009-06-05T05:19:23.533 回答
0

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

于 2009-05-29T03:56:28.140 回答
0

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

结果是,如果它还没有触发,我会处理它。但是,如果有人有更好的解决方案,我愿意接受。

于 2009-06-04T14:58:37.290 回答
0

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

于 2009-06-05T10:40:45.820 回答