在C#中的两个表单之间使用NotifyIcon

时间:2013-11-27 18:56:56

标签: c# system-tray notifyicon

我计划使用此方法显示通知图标,以便可以在主表单和子表单(从另一个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代理?我认为当形式的一切都被摧毁和释放?
  2. 编辑:为了澄清 - 我可以确认使用没有上述代理的代码,当我关闭表格时系统托盘图标确实消失了,我也确实使用VS UI从工具箱拖放NotifyIcon所以设计师是处理我的初始化,我正在使用上面的构造函数来访问它。

2 个答案:

答案 0 :(得分:1)

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

  

我认为当形式的一切都被摧毁并释放出来时?

如果它是实例数据,那么因为它是静态的,因此不与实例绑定,所以当表单消失时它将不会被清除。

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

答案 1 :(得分:0)

您需要设置

nutifier.Visible = false;
notifier = null;

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