Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在基于多表单的应用程序c中添加通知图标的位置#_C#_Winforms - Fatal编程技术网

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

C# 在基于多表单的应用程序c中添加通知图标的位置#,c#,winforms,C#,Winforms,我正在制作一个基于多表单的应用程序,遇到通知图标问题。我已将通知图标添加到用户看到的第一个(主)表单中,但当用户离开该表单,然后返回到该表单时,我很快遇到了一个问题,在任务栏中添加了一个新的通知图标。我发现解决这个问题的方法是对从主菜单加载的表单调用ShowDialog(),然后在用户返回时使用这些表单。这真的是唯一的方法吗?我有一个非常深的应用程序,有多个表单。我是否必须始终将第一个表单保留在内存和屏幕上,以维护通知图标,并确保不会将新的通知图标添加到任务栏 谢谢我会将字典类型集合保持在比您的

我正在制作一个基于多表单的应用程序,遇到通知图标问题。我已将通知图标添加到用户看到的第一个(主)表单中,但当用户离开该表单,然后返回到该表单时,我很快遇到了一个问题,在任务栏中添加了一个新的通知图标。我发现解决这个问题的方法是对从主菜单加载的表单调用ShowDialog(),然后在用户返回时使用这些表单。这真的是唯一的方法吗?我有一个非常深的应用程序,有多个表单。我是否必须始终将第一个表单保留在内存和屏幕上,以维护通知图标,并确保不会将新的通知图标添加到任务栏


谢谢

我会将字典类型集合保持在比您的表单更高的级别。对于通知图标是否显示,键应为formId/reference和bool。在显示notify图标之前,我要检查表单是否已经显示了一个。我还为notifyIcon注册事件,这样当它关闭时,如果更改字典值


只是一个让你开始的想法

与其他WinForms组件一样,此组件不需要放置在表单中即可正常工作。您可以在另一个非表单类上实例化它、设置属性和绑定事件。例如,这是一个可以管理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:我也做过类似的工作,在打开第一个表单之前在program.cs中实例化一个类似的类。我应该补充一点,这种方法需要在应用程序结束时显式隐藏NI控件。否则图标将保留在任务栏中,直到鼠标悬停。