【问题标题】:Use a NotifyIcon between two forms in C#在 C# 中的两个表单之间使用 NotifyIcon
【发布时间】:2013-11-27 18:56:56
【问题描述】:

我打算用这个方法来显示一个通知图标,以便在主窗体和子窗体之间访问它(从另一个SO post找到)

public partial class MainForm : Form {
    public MainForm() {
        InitializeComponent();
        notifier = this.notifyIcon1;
        this.FormClosed += delegate { notifier = null; };
    }

    public static NotifyIcon Notifier { get { return notifier; } }

    private static NotifyIcon notifier;
}
  1. 是否需要添加 FormClosed 委托?我会认为,当其他一切都被破坏和释放的形式时?

编辑:为了澄清 - 我可以确认使用没有上述委托的代码,当我关闭表单时,系统托盘图标确实消失了,我也确实使用 VS UI 从工具箱中拖放了一个 NotifyIcon,所以设计师是为我处理初始化,我使用上面的构造函数来访问它。

【问题讨论】:

    标签: c# system-tray notifyicon


    【解决方案1】:

    如果通知图标在逻辑上与表单的此实例相关联,那么您不应该将其设置为 静态 字段。将其标记为静态是为了明确表示它绑定到一个实例,而是在所有实例之间共享。

    我会认为,当表单中的其他所有内容都被销毁并释放时?

    如果它是实例数据,它会是,但因为它是静态的,因此不绑定到实例,当表单消失时它不会被清理。

    当然,如果这是主窗体(而不是用词不当),那么整个应用程序将在窗体关闭时结束,这将清理所有内容,无论是否静态。

    【讨论】:

      【解决方案2】:

      你需要设置

      nutifier.Visible = false;
      notifier = null;
      

      关闭时。如果没有,图标会在应用程序关闭后保留

      【讨论】:

      • 我测试过,当主窗体关闭时,托盘图标确实消失了
      猜你喜欢
      • 2013-06-06
      • 1970-01-01
      • 2013-06-02
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多