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

时间:2012-07-17 16:32:25

标签: 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();

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

有人可以帮助我吗?

4 个答案:

答案 0 :(得分:5)

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

Form1 form1 = new Form1();

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

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

你想做

theMainform1.Show();

所以你会:

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

答案 1 :(得分:4)

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

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

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

的自引用
Form2 form2 = new Form2(this);

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

以下是有人正在寻找的工作代码:

<强> 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();
         }

感谢您的帮助!

我爱你!!!