C#WinForms应用程序显示许多托盘图标

我是C#的新手,这是我的第三个问题。

我正在制作一个可以最小化到系统托盘的应用程序。 我有两个名为Form1Form2表单。 到目前为止我所做的是:

Form1 ,我有一个按钮,使用此代码显示Form2

 this.Hide(); Form2 form2 = new Form2(); form2.Show(); 

Form2有一个隐藏它的按钮,使用以下代码:

 this.Hide(); 

现在,我在任务栏上有托盘图标。 托盘图标有一个ContexMenuStrip ,并且使用此代码有一个名为show的选项:

 Form1 form1 = new Form1(); form1.Show(); 

问题是当我点击它时,任务栏上出现第二个托盘图标。 两个托盘图标都具有相同的菜单,两者都有效。 如果我再次点击显示弹出Form1的另一个窗口,并且有三个托盘图标,依此类推……

有人能帮我吗?

这是因为您每次都在创建一个新的Form1。

 Form1 form1 = new Form1(); 

您不想创建新的 Form1,您想要显示旧的Form1。 为Form2提供对第一个 form1的引用(例如,将其称为theMainform1)。 而不是

 Form1 form1 = new Form1(); form1.Show(); 

你想做

 theMainform1.Show(); 

所以你会:

  this.Hide(); Form2 form2 = new Form2(); form2.theMainform1 = this; form2.Show(); 

问题是您正在创建Form1的新实例。 这创造了一个全新的窗口,而不是恢复旧的窗口。

 Form1 form1 = new Form1(); form1.Show(); 

您需要让Form2引用Form1的原始实例。 您可以使构造函数传入一个看起来像的自引用

 Form2 form2 = new Form2(this); 

您可以通过在窗体上将ShowInTaskbar设置为false来阻止窗口在任务栏中显示图标。 但是,当他们说你一遍又一遍地创建新表格时,其他答案都是正确的。

为什么要同时显示两个表单? 它们是否应同时在屏幕上并同时处于活动状态? 如果是这样,您可以尝试MDI接口。 http://en.wikipedia.org/wiki/Multiple_document_interface

它可能在WinForms中,但我认为微软正在WPF中逐渐远离它们。

这是一个工作代码,以防有人正在寻找它:

Form1中:

 /* Hiding Form1 and showing Form2 */ private void btnHideForm1_Click(object sender, EventArgs e) { Form mod = new Form2(); mod.Owner = this; mod.Show(); this.Hide(); } 

窗体2:

  /* Hiding Form2 and showing Form1 */ private void btnHideForm2_Click(object sender, EventArgs e) { this.Owner.Show(); this.Close(); } 

谢谢你的帮助!

我爱你!!!