在c#中控制多个窗体的显示、隐藏或关闭
本文关键字:显示 隐藏 窗体 控制 | 更新日期: 2023-09-27 17:49:20
我希望能够在一个表单中显示,隐藏或关闭一些其他表单。我的想法是,我的程序从一个表单开始,有一些按钮将显示其他表单。也就是说,如果用户点击一个按钮来打开另一个表单,这个主表单应该最小化,当用户关闭另一个表单时,这个表单将恢复到正常或最大化状态。
控制其他表单的主表单(Form1.cs)的代码如下:
namespace MultipleForms
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/*
* I want to make a public reference to this Form1
* So that when user closes Form2 That is F2 this form will be
* set back to normal or maximized state
*/
private void buttonStartForm2_Click(object sender, EventArgs e)
{
//Declare Form2
Form2 F2 = new Form2();
//Show Form2
F2.Show();
//Minimize Form1
this.WindowState = FormWindowState.Minimized;
}
}
}
这是form2。cs
namespace MultipleForms
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
//FormClosed event handler
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
//Closing Form2
this.Close();
//Now I need a code to make Form1 to recover from minimized
// state to normal or maximized state. how do I should refer to it?
}
}
}
我想我必须做一些东西在表单关闭事件,但我怎么能初始化的Form1.cs作为公共的东西?或者我也应该在form2。cs中初始化form1。cs ?或者可以通过Program.cs文件完成:
namespace MultipleForms
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
p。S:关键是Form2应该关闭,而不是隐藏
使用Hans的解决方案,最好这样使用:
private bool isEnabledCmpFrm = false;
public void buttonStartComparisonForm_Click(object sender, EventArgs e)
{
if (!isEnabledCmpFrm)
{
ComparisonForm CmpFrm = new ComparisonForm();
CmpFrm.Show();
CmpFrm.WindowState = FormWindowState.Normal;
this.WindowState = FormWindowState.Minimized;
isEnabledCmpFrm = true;
CmpFrm.FormClosed += delegate
{
this.WindowState = FormWindowState.Normal;
isEnabledCmpFrm = false;
};
}
}
如果我理解正确的话,你可以钩入Form Closing事件。
在主表单中你可以这样写:
Form2 form2 = new Form2();
form2.Show();
form2.FormClosing += new FormClosingEventHandler(form2_FormClosing);
void form2_FormClosing(object sender, FormClosingEventArgs e)
{
this.Show();
}
不要让表单侦听自己的事件。代码需要输入Form1。这样的:
Form2 F2 = new Form2();
F2.FormClosed += delegate { this.WindowState = FormWindowState.Normal; };
F2.Show();
this.WindowState = FormWindowState.Minimized;
您需要将对主表单的引用传递给子表单,并使用主表单的show方法使其在子表单关闭时再次可见。