在Windows Forms / C#/。Net Framework 2.0中使用NotifyIcon时,如果我在 MouseClick 或单击事件中显示气球提示文本,则<将启动em> DoubleClick 或 MouseDoubleClick 事件:
private void notifyIcon_DoubleClick(object sender, EventArgs e)
{
MessageBox.Show("double click"); // this is never called on double-click
}
private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
{
MessageBox.Show("mouse double click"); // this is never called on double-click
}
private void notifyIcon_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
this.notifyIcon.BalloonTipText = "Some Info";
this.notifyIcon.ShowBalloonTip(1000);
}
}
如果我双击通知图标,我会看到气球提示显示/刷新两次,但没有消息框。
我正在使用Visual Studio 2010和Windows 7 Ultimate 64位。
提前感谢您的帮助!
答案 0 :(得分:1)
您需要检查是否双击notifyIcon_MouseClick
private void notifyIcon_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (e.Clicks < 2) //not a doubleclick
{
this.notifyIcon.BalloonTipText = "Some Info";
this.notifyIcon.ShowBalloonTip(1000);
}
}
}
答案 1 :(得分:0)
这可能是一个错误。我不知道应该责怪谁。
e.Clicks在调用notifyIcon.ShowBalloonTip时归零。如果showballoontip被赋予无效参数,则会向控制台写入异常,e.Clicks最终会高于1.
我正在使用固件1.2的罗技g5鼠标。它不是罗技设定点软件。回到微软驱动程序,也没有帮助。
我在.NET framework 4.0,Windows 7 64位和Visual Studio 2010上运行。
这是一个非常奇怪的错误。有时完全相同的构建有时不会显示错误。在同一会话中,它可以再次发生。重建后,错误再次出现。
答案 2 :(得分:0)
这确实是一个错误。我找到了比任何建议更好的解决方法。请勿尝试在Click或DoubleClick活动中启动BalloonTip。相反,您可以全局创建布尔标志,然后在Click事件中设置标志。还要创建一个定期触发的Timer(),每1000ms对我来说都没问题。当计时器触发时,它会检查该标志,如果已设置,则相应地触发ShowBalloonTip(),同时重置该标志。这并不会破坏点击或DoubleClick行为,并且仍然可以通过NotifyIcon上的Click或DoubleClick事件中发生的更改实现BalloonTip的所需行为。对我来说很棒!对不起,我没有很容易提供代码snipet,但这个描述应该给出如何轻松实现它的想法。