【问题标题】:System Tray notifyIcon won't accept left-click event系统托盘 notifyIcon 不接受左键事件
【发布时间】:2010-01-11 22:38:03
【问题描述】:

我正在创建一个仅限系统托盘的应用程序。没有主窗体的图标有点复杂,但通过 StackOverflow 上的先前主题,我已经解决了。右键单击效果很好,我已经在上下文菜单中链接,等等。

我在使用左键时遇到问题。据我所知,“notifyIcon1_Click”事件根本没有触发。

    private void notifyIcon1_Click(object sender, EventArgs e)
    {
        Debug.WriteLine("Does it work here?");

        if (e.Equals(MouseButtons.Left))
        {
            Debug.WriteLine("It worked!");
        }
    }

这些调试行都没有输出,该事件中的断点不会停止程序等。

我做错了吗?我的下一步应该是什么?我正在用 C# 编写代码,如果这对任务栏行为很重要的话,我会使用 Windows 7。

【问题讨论】:

  • 你能展示更多你的代码吗?事件是“有线的”吗?
  • 事件是否已正确连接到 Designer.cs 文件 - this.notifyIcon1.Click += new System.EventHandler(this.notifyIcon1_Click);
  • 您确实记得将其注册为事件处理程序,对吧?
  • 谢谢大家:0 我已经习惯了它会自动为我接线,它有时会像这样滑过……互联网上的其他人也有类似的问题,而且看起来更大问题。废话。

标签: c# windows winforms click


【解决方案1】:

如果您想确定是左击还是右击,请连接MouseClick,而不是点击。

这样你会得到这样的签名:

private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
{
    if(e.Button == MouseButtons.Left)
        //Do the awesome left clickness
    else if (e.Button == MouseButtons.Right)
        //Do the wickedy right clickness
    else
        //Some other button from the enum :)
}

【讨论】:

  • 什么相当于“this.notifyIcon1.Click += new System.EventHandler(this.notifyIcon1_Click);”在这种情况下?显而易见的(也就是说,将“Click”替换为“MouseClick”会引发“'notifyIcon1_MouseClick' 与委托 'System.EventHandler' 匹配的无重载”错误。除此之外,谢谢!我正要开始解释为什么我不能不是左/右工作,但你打败了我。
  • *edit,试图获取上面评论者使用的代码块。但它没有用。希望 cmets 有一个功能齐全的文本编辑器...
  • 嘿@cksubs,如果你能展示你为解决这个问题所做的工作,这将非常有帮助,这样对像我这样的未来访问者会有帮助。 ;) 谢谢!
  • 在下面发布了完整的解决方案。
【解决方案2】:

如果你想要消息/气球本身的点击事件使用

_notifyIcon.BalloonTipClicked += notifyIconBalloon_Click;


private void notifyIconBalloon_Click(object sender, EventArgs e)
{
// your code
}

【讨论】:

    【解决方案3】:
        private void NotifyIcon_Click(object sender, EventArgs e)
        {
            MouseEventArgs mouseEventArgs = (MouseEventArgs)e;
    
            if (mouseEventArgs.Button == MouseButtons.Right && IsHandleCreated)
            {
                popupMenu1.ShowPopup(MousePosition);
                return;
            }
    
            if (mouseEventArgs.Button == MouseButtons.Left && IsHandleCreated)
            {
                if (isWindowMinimized)
                    showWindow();
                else
                    hideWindow();
            }
        }
    

    【讨论】:

      【解决方案4】:

      另一个答案不清楚您需要 MouseClick 事件而不是 Click。

      notifyIcon.MouseClick += MyClickHandler;
      

      那么你的处理函数就可以正常工作了。

      void MyClickHandler(object sender, MouseEventArgs e)
      {
          if (e.Button == MouseButtons.Left)
          {
              Console.WriteLine("Left click!");
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-28
        • 2018-07-15
        • 2011-02-14
        相关资源
        最近更新 更多