单击托盘图标时发出notifyIcon.BalloonTipClicked

时间:2017-02-11 02:31:48

标签: c# notifyicon balloon-tip

我有一个由NotifyIcon支持的托盘应用程序。它有时会通过notifyIcon.ShowBallonTip()触发Toast通知。它在Windows 10 1607上运行。

我订阅了以下两个事件:

notifyIcon.MouseUp += notifyIcon_MouseUp;
notifyIcon.BalloonTipClicked += notifyIcon_BalloonTipClicked;

乍一看,一切都很好:

  • 当我点击托盘图标时,我收到了MouseUp事件并且发生了正确的事情
  • 当我点击吐司时,我收到了BalloonTipClicked事件并且发生了正确的事情

现在应用程序中的错误是,如果用户在吐司显示时点击托盘图标,则表现就像用户点击了吐司一样。换句话说,在显示气球/吐司时单击托盘图标将触发BallonTipClicked,即使气球/吐司从未实际点击过。

当我在BalloonTipClicked时,“发件人”只是NotifyIcon。我没有看到任何区分“气球提示点击”与“托盘图标点击”的方法。我的意思是,事件本身被称为BallonTipClicked,所以当我点击应用程序图标时,我不知道它为什么会触发。

根据MSDN this should not be happening

  

BalloonTipClicked:单击气球提示时发生。

     

MouseUp:当指针位于任务栏通知区域中的图标上时,用户释放鼠标按钮时发生。

文档错了吗?获取我想要的行为的任何想法?

1 个答案:

答案 0 :(得分:0)

我通过注册BalloonTipShown BalloonTipClosed事件来解决这个问题,并将状态保存在字段中。

    private bool _balloonShown= false;

    private void notifyIcon_BalloonTipClosed(object sender, EventArgs e)
    {
        _balloonShown = false;
    }

    private void notifyIcon_BalloonTipShown(object sender, EventArgs e)
    {
        _balloonShown = true;
    }

..然后在BallonTipClicked事件中检查该字段:

notifyIcon.BalloonTipClicked += (sender, args) =>
{
    if (_balloonShown)
    {
        BringToFront();
        return;
    }

    //...some action

};