C# 更改单独窗体上的通知图标

C# 更改单独窗体上的通知图标,c#,winforms,C#,Winforms,我有一个表单(Form1),上面有一个Notify图标。我有另一个表单(Form2),我想更改NotifyIcon的图标。每当我使用此代码时,我都会在系统托盘中显示一个额外的图标,而不是更改当前图标: 表单1(ico是通知图标的名称): 表格2: Form1 form1 = new Form1(); form1.DisplayIcon = "on.ico"; 我怀疑is与在Form2上创建Form1的新实例有关,但我不确定不这样做如何访问“DisplayIcon”。谢谢 UDPATE:我对在表

我有一个表单(Form1),上面有一个Notify图标。我有另一个表单(Form2),我想更改NotifyIcon的图标。每当我使用此代码时,我都会在系统托盘中显示一个额外的图标,而不是更改当前图标:

表单1(ico是通知图标的名称):

表格2:

Form1 form1 = new Form1();
form1.DisplayIcon = "on.ico";
我怀疑is与在Form2上创建Form1的新实例有关,但我不确定不这样做如何访问“DisplayIcon”。谢谢


UDPATE:我对在表单2中编写自定义属性有点困惑,它会是这样的:

public Form Form1
{
    set {value;}
}

我假设form1在某一点上创建了form2。此时,您可以将form1的引用传递给form2,以便form2可以访问form1的DisplayIcon属性

所以你最终会得到这样的结果

//Somewhere in the code of form1
public void btnShowFormTwoClick(object sender, EventArgs e) 
{
    Form2 form2 = new Form2();
    form2.Form1 = this; //if this isn't done within form1 code you wouldn't use this but the form1 instance variable
    form2.Show();
}

//somewhere in the code of form2
public Form1 Form1 { get;set;} //To create the property where the form1 reference is storred.
this.Form1.DisplayIcon = "on.ico";

您的怀疑是正确的,您正在创建Form1的第二个实例,这将导致重复的NotifyIcon

为了在正确的实例上设置DisplayIcon属性,您需要从Form2引用Form1

一个可能的解决方案是在创建Form2时将引用从Form1传递到Form2(我假设您从Form1创建Form2)

例如:

Form2 form2 = new Form2();
form2.Form1 = this; // Form1 is custom property on Form2 that you need to add
form2.Show();
在Form2上,自定义属性将定义为:

 //Note the type is Form1, in order to get to your public DisplayIcon property. 
 public Form1 Form1 { get;set;} 

做得好,比我能做的更快地得到解决方案!我对在表单2上编写自定义属性有点困惑,它是否类似于:public Form1{set{value;}}自定义属性在表单2上的定义如下:public Form1 Form1{get;set;}我在示例中添加了Form1属性代码。
 //Note the type is Form1, in order to get to your public DisplayIcon property. 
 public Form1 Form1 { get;set;}