2009-05-28 102 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

相关问题