2012-07-17 58 views
1

我是C#的超级新手,这是关于它的第三个问题。C#WinForms应用程序显示许多托盘图标

我正在制作一个可以最小化到系统托盘的应用程序。我有两种表格Form1Form2。什么是迄今为止我所做的是:

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

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

Form2有一个按钮,这是隐藏它,使用此代码:

this.Hide(); 

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

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

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

有人能帮助我吗?

回答

5

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

Form1 form1 = new Form1(); 

你不希望创建一个新Form1的,要显示旧的。给Form2参考你的第一个 form1(例如,称它为MainForm1)。然后,而不是

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

你想干什么

theMainform1.Show(); 

所以你会:

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

我该如何提供参考? :'(我感觉很糟糕 – 2012-07-17 19:58:50

+0

就像我展示的一样,只需将一个属性添加到Form2中即可,例如, //表单2的其他属性 public Form1 theMainform1; – aquinas 2012-07-17 20:30:02

4

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

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

您需要让Form2引用Form1的原始实例。你可以做一个构造函数中自我引用,看起来就像

Form2 form2 = new Form2(this); 
1

您可以防止从窗口通过设置有在任务栏的图标ShowInTaskbar的形式虚假通过。但是,当他们说你一遍又一遍地创建新表单时,其他答案是正确的。

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

它可能在WinForms中,但我认为微软正在从WPF中离开它们。

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

感谢您的帮助家伙! !

我爱你!

相关问题