在基于多个表单的应用程序中添加通知图标的位置c#

时间:2011-03-24 20:43:56

标签: c# winforms

我正在制作基于多个表单的应用程序,并且遇到了通知图标的问题。我已将通知图标添加到用户看到的第一个(主)表单中,但是当用户导航离开此表单然后返回到任务栏中添加了新通知图标时,我很快就遇到了问题。我找到的方法是在从主菜单加载的表单上调用ShowDialog(),然后在用户导航回来时忽略这些表单。这真的是唯一的方法吗?我有一个非常深入的应用程序,有多个表单,我总是要将第一个表单保留在内存和屏幕上以维护通知图标并确保新的通知图标没有添加到任务栏?

谢谢

2 个答案:

答案 0 :(得分:2)

与其他WinForms组件一样,这个组件不需要放在一个表单中才能正常工作。您可以实例化它,设置属性并将事件绑定到另一个不是Form的类上。例如,这是一个可以管理NI控件的类:

namespace WinformsTesting {

    using System;
    using System.Windows.Forms;
    using System.Drawing;

    public class NotifyIconManager {

        private NotifyIcon _ni;

        public void Init() {

            _ni = new NotifyIcon();
            _ni.MouseDoubleClick += new MouseEventHandler(_ni_MouseDoubleClick);
            _ni.Text = "This is my notify icon";

            Icon icon = new Icon(@"C:\temp\myicon.ico");
            _ni.Icon = icon;
            _ni.Visible = true;

        }

        void _ni_MouseDoubleClick(object sender, MouseEventArgs e) {
            MessageBox.Show("Hello");
        }
    }
}

这里唯一的问题是与应用程序的其余部分进行交互,但根据您使用NI控件的方式,这可能是一个很好的起点。

答案 1 :(得分:1)

我会将字典类型的集合保持在比表单更高的级别。对于是否显示通知图标,键将为formId / reference和bool。在我展示notifyIcon之前,我会检查表单是否已经有一个显示。我还会为notifyIcon注册事件,以便在关闭时更改字典值。

只是一个让你入门的想法。