我是C#的新手,这是我的第三个问题。
我正在制作一个可以最小化到系统托盘的应用程序。我有两个名为Form1
和Form2
的表单。到目前为止我所做的是:
在Form1
中,我有一个使用此代码显示Form2
的按钮:
this.Hide();
Form2 form2 = new Form2();
form2.Show();
Form2
有一个隐藏它的按钮,使用以下代码:
this.Hide();
现在,我在任务栏上有托盘图标。托盘图标有ContexMenuStrip
,并且使用此代码有一个名为 show 的选项:
Form1 form1 = new Form1();
form1.Show();
问题是,当我点击它时,任务栏上会出现第二个托盘图标。两个托盘图标都具有相同的菜单,两者都有效。如果我再次点击 show ,会弹出另一个带有 Form1 的窗口,并且有三个托盘图标,依此类推....
有人可以帮助我吗?
答案 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();
}
感谢您的帮助!
我爱你!!!