C#,Windows窗体:Click事件中带有ShowBalloonTip的NotifyIcon不再触发DoubleClick事件

时间:2011-01-12 15:27:05

标签: c# winforms double-click notifyicon balloon

在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位。

提前感谢您的帮助!

3 个答案:

答案 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,但这个描述应该给出如何轻松实现它的想法。