1

我对 C# 非常陌生,这是我在这里提出的第三个问题。

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

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

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

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

this.Hide();

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

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

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

有人能帮我吗?

4

4 回答 4

5

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

Form1 form1 = new Form1();

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

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

你想做

theMainform1.Show();

所以你会有:

 this.Hide();
 Form2 form2 = new Form2();
 form2.theMainform1 = this;
 form2.Show();
于 2012-07-17T16:35:21.330 回答
4

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

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

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

Form2 form2 = new Form2(this);
于 2012-07-17T16:35:27.407 回答
1

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

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

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

于 2012-07-17T16:44:04.860 回答
0

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

表格1:

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

谢谢你们的帮助!!!

我爱你!!!

于 2012-07-21T11:16:10.713 回答