直到被点击之前,使气球提示文本可见

5

我的程序中有一个 NotifyIcon,用于在任务栏中显示气泡提示。我编写的代码如下:

notifyIcon1.Icon = new Icon(SystemIcons.Application, 40, 40);
notifyIcon1.Visible = true;
notifyIcon1.Text = "Test Notify Icon Demo";
notifyIcon1.BalloonTipText =count+ " Alerts";
notifyIcon1.BalloonTipIcon = ToolTipIcon.Info;
notifyIcon1.BalloonTipTitle = "Alert!";
notifyIcon1.ShowBalloonTip(999999999);

气球提示框在设置时间(999999999)后将不可见。但是我希望在 baloontipclicked 事件发生前一直显示气球提示框。
如何使气球提示框永久可见?

1
这个 shell 对此有强制规定。超时计时器只有在它有一些迹象表明用户可能已经看到它,并且不能太长的情况下才会开始计时。如果您想要一个永久通知,那么您不应该使用气球提示。一个常规的最上层窗体是最好的选择,否则不能保证它能与其他最上层窗口竞争。 - Hans Passant
2个回答

7

如果没有点击过,您可以再次显示它。如果用户没有点击关闭事件(BalloonTipClosed),则只需再次显示。

private void ShowBalloonTip(int minutes) {
    notifyIcon.BalloonTipIcon = ToolTipIcon.Error;
    notifyIcon.BalloonTipText = "Text";
    notifyIcon.BalloonTipTitle = "Title";
    notifyIcon.ShowBalloonTip(minutes* 60 * 1000);
    m_showUntil = DateTime.Now.AddMinutes(minutes);
}


private void notifyIcon_BalloonTipClosed(object sender, EventArgs e) {
    if (m_showUntil > DateTime.Now)
        notifyIcon.ShowBalloonTip(60 * 1000);
}
private void notifyIcon_BalloonTipClicked(object sender, EventArgs e) {
    m_showUntil = DateTime.MinValue;
    (..)
}

只是一个小问题。如果在此期间出现另一个通知,则会将应用程序置于未响应状态。想要将此片段应用到其代码中的人应该进行编辑,以限制同时只有一个通知。 - Baz Guvenkaya

7

来自MSDN:

操作系统强制执行最小和最大超时值,通常分别为10和30秒,但这取决于操作系统。超时值过大或过小将被调整为适当的最小或最大值。此外,如果用户似乎没有使用计算机(没有键盘或鼠标事件发生),则系统不会将此时间计入超时时间。

似乎无法覆盖最大超时时间(即使您指定了更长的时间,Windows也会进行调整并限制为30秒),因此通知将会消失,不会等待您在2分钟后单击它。

如果您真的想要不同的行为,您可能应该使用其他对象或模拟类似于表单的东西,在其中您可以完全控制行为,并且可以根据您的代码显示、隐藏和关闭。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接