我有一个由NotifyIcon支持的托盘应用程序。它有时会通过notifyIcon.ShowBallonTip()触发Toast通知。它在Windows 10 1607上运行。
我订阅了以下两个事件:
notifyIcon.MouseUp += notifyIcon_MouseUp;
notifyIcon.BalloonTipClicked += notifyIcon_BalloonTipClicked;
乍一看,一切都很好:
现在应用程序中的错误是,如果用户在吐司显示时点击托盘图标,则表现就像用户点击了吐司一样。换句话说,在显示气球/吐司时单击托盘图标将触发BallonTipClicked,即使气球/吐司从未实际点击过。
当我在BalloonTipClicked时,“发件人”只是NotifyIcon。我没有看到任何区分“气球提示点击”与“托盘图标点击”的方法。我的意思是,事件本身被称为BallonTipClicked,所以当我点击应用程序图标时,我不知道它为什么会触发。
根据MSDN this should not be happening:
BalloonTipClicked:单击气球提示时发生。
MouseUp:当指针位于任务栏通知区域中的图标上时,用户释放鼠标按钮时发生。
文档错了吗?获取我想要的行为的任何想法?
答案 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
};