【问题标题】:Multiple Notify Icons in the System Tray in WinformsWinforms系统托盘中的多个通知图标
【发布时间】:2013-11-04 17:12:28
【问题描述】:

可能我的问题与此重复 Multiple icons open in tray bar。在我的 winforms 应用程序中,一旦关闭表单,我就会在系统托盘中显示应用程序,即应用程序在关闭表单后不会退出,而是在单击应用程序系统托盘上的右键单击上下文菜单上的“关闭”时退出。

但是当我继续使用该应用程序时,我注意到系统托盘中有更多通知图标。但是一旦我将鼠标悬停在它们上面,它们就会消失,除了应用程序正在运行的那个。我已经尝试了所有方法来消除多个图标,但我无法这样做。

下面是我的代码 用于最小化到系统托盘

public void MinimizeToTray()
        {
            try
            {
                this.WindowState = FormWindowState.Minimized;
                TrayIcon.Visible = true;
                TrayIcon.ShowBalloonTip(1000);
                ShowInTaskbar = false;
                //this.Activate();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

在表单加载时我已添加此代码

private void LoadTrayMenu()
        {
            TrayMenu.Items.Add("Reminder");
            TrayMenu.Items.Add("Close");
            TrayMenu.Items[0].Click += new EventHandler(this.Reminder_Click);
            TrayMenu.Items[1].Click += new System.EventHandler(this.Dispose_Click);
            TrayIcon.ContextMenuStrip = TrayMenu;
        }

dispose事件如下

private void Dispose_Click(object Sender, EventArgs e)
        {
            TrayIcon.Visible = false;
            TrayIcon.Icon = null;
            TrayIcon.Dispose();
            this.Dispose();
        }

在鼠标点击图标时,我编写了以下代码

private void TrayIcon_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {

                this.Show();
                this.WindowState = FormWindowState.Normal;
                TrayIcon.Visible = false;
                //TrayIcon.Icon = null;
                //TrayIcon.Dispose();
                ShowInTaskbar = true;
            }
        }

我尝试清除通知图标,但即使这样也无济于事。 我是否错过了一些非常明显的东西。任何帮助将不胜感激。

【问题讨论】:

  • 你解决了吗?请告诉我你是怎么做到的,因为我还做不到。谢谢。

标签: c# .net winforms notifyicon


【解决方案1】:

在此方法中添加Application.Exit()

private void Dispose_Click(object Sender, EventArgs e)
        {
            TrayIcon.Visible = false;
            TrayIcon.Icon = null;
            TrayIcon.Dispose();
            Application.Exit()
        }

您不需要this.Dispose,因为它将在Application.Exit() 中调用

如果进程结束,检查进程是否还在任务管理器中运行,看看图标是否消失。

【讨论】:

  • Application.Exit(0) 显示在 Invalid Arguments,我们不能给 Application.Exit();
  • 此外,您提供的方法是用于 Closing 事件。但即使我没有关闭应用程序。仍然当我执行多次最小化并恢复正常状态时,我可以在系统托盘中找到许多图标。我该如何处理?
  • 是的,谢谢。但我发现有一个拼写错误。所以继续使用 Application.Exit();
  • 我应用了您添加 Application.Exit() 的想法,但它没有锻炼,我仍然可以在系统托盘中看到多个图标
【解决方案2】:

图标仅保留在通知区域并在鼠标悬停时消失,因为应用程序没有干净地退出。您是退出应用程序还是停止 VS 中的调试?当抛出异常并且应用突然存在时也会发生这种情况。

【讨论】:

  • 我实际上正在退出应用程序。有没有办法解决这个问题?
猜你喜欢
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多