【问题标题】:How can I close a NotifyIcon BallonToolTip from code?如何从代码中关闭 NotifyIcon BallonToolTip?
【发布时间】:2014-01-04 02:14:38
【问题描述】:

我们使用NotifyIcon 在用户收到需要他们注意的新消息时提醒他们。如果其他人先收到消息,通知图标应该再次隐藏,但是我在弄清楚如何从后面的代码中关闭气球时遇到问题。

我的代码如下所示:

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?

【问题讨论】:

  • 你试过 notifyIcon.Icon = null;
  • 本机winapi函数不支持。粗略的解决方法是处理 NotifyIcon。
  • @HighCore 是的,很遗憾,我得到了一份新工作,它正在使用 WinForms。不过,我希望将来在某个时候回到 WPF :)
  • @HansPassant 那不会完全摆脱系统托盘中的图标吗?

标签: c# .net winforms .net-3.5 notifyicon


【解决方案1】:

我从来没有找到一种简单的方法来做到这一点。文档说:

最小和最大超时值由操作强制执行 系统,通常分别为 10 秒和 30 秒,但是这 可能因操作系统而异。超时值是 太大或太小都调整到适当的最小值或 最大值。

尽管这并没有专门解决显式关闭气球的问题,但它向我表明,一旦显示气球,ShowBalloonTip() 方法的调用者根本无法完全控制气球。

我发现的最佳选择是您已经提到的:

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

不理想,但它有效。另一个想法是更改气球中显示的消息以指示先前的消息已过时:

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

【讨论】:

  • 显示一条消息以表明前一条消息已过时的想法行不通。消息已排队,直到上一条消息超时后才会显示。
【解决方案2】:

有一个简单的方法可以做到这一点。

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

试试这个,它肯定会 100% 起作用。

【讨论】:

    猜你喜欢
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    相关资源
    最近更新 更多