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