如何从代码中关闭NotifyIcon BallonToolTip?

Rac*_*hel 6 .net c# notifyicon .net-3.5 winforms

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

我的代码看起来像这样:

myNotifyIcon.ShowBalloonTip(2000, title, message, icon);
Run Code Online (Sandbox Code Playgroud)

我尝试过这里的建议,但没有一个是合适的.

  • 使用myNotifyIcon.Visible = true不会隐藏它

  • 使用myNotifyIcon.Visible = false; myNotifyIcon.Visible = true;将隐藏它,但它也隐藏了托盘中的图标,当它再次显示时,它会显示一个不同的位置.

  • myNotifyIcon.Show(0) 不是一个有效的方法

  • myNotifyIcon.ShowBalloonTip(0)或者myNotifyIcon.ShowBalloonTip(1)似乎不起作用,因为气球只是显示出来并且似乎根本不会自行消失.

我看了这个问题,有关使用WinAPI的查找窗口,并发送一个WM_CLOSE消息,但我也不太清楚该怎么做可靠.

如何关闭NotifyIcon后面的代码?

Nic*_*zer 1

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

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

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

我发现的最好的选择是你已经提到的一个:

myNotifyIcon.Visible = false;
myNotifyIcon.Visible = true;
Run Code Online (Sandbox Code Playgroud)

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

myNotifyIcon.ShowBalloonTip(2000, "Title", "Never mind!", ToolTipIcon.Info);
Run Code Online (Sandbox Code Playgroud)