正确关闭二级表格与申请出口
本文关键字:表格 二级 出口 | 更新日期: 2023-09-27 18:05:20
这可能是一个标准问题。我读了很多关于这方面的文章,但没有一篇特别指出我的问题。
我正在开发一个WinForm,并有一个"主菜单"的形式,在启动时加载。在这个主界面中有几个按钮,可以打开程序的各个模块(其他形式)。
我可以打开表单没有问题,可以关闭它并重新显示主表单没有问题。问题在于当用户点击控制框中的(X)时,应用程序并没有退出,因为主表单仍然在那里,但是被隐藏了。我知道我可以在表单的关闭事件中放入application.exit()。然而,如果我有一个按钮,关闭表单,并希望取消隐藏主表单,应用程序将关闭由于formclosing事件。
谁能帮我理解一下这个原理?我认为它不应该像我看起来的那么难,而且我真的不想使用panel。提前感谢。
约瑟夫
下面的代码根据下面提供的答案解决了这个问题
private void btnHome_Click(object sender, EventArgs e)
{
Form f1 = Application.OpenForms[0];
f1.Visible=true;
this.Close();
}
private void frmCostControlMain_FormClosed(object sender, FormClosedEventArgs e)
{
Form f = Application.OpenForms[0]; // The main form
if (f.Visible==true)
{
f.BringToFront();
}
else
{
Application.Exit();
}
}
您可以检查Application.OpenForms
,查看当前表单之外是否存在一些非隐藏表单。如果您只想检查主表单,您可以检查Application.OpenForms[0]
。因为它是先打开的,所以它总是在索引0处。从内存:
Form_Closed(object sender, EventArgs e)
{
Form f = Application.OpenForms[0]; // The main form
if (f.Visible) {
f.BringToFront();
} else {
Application.Exit();
}
}
当关闭按钮被点击时,你将首先取消隐藏主表单,然后关闭当前表单。
我还是不明白你的问题,但我想你可以使用Application.Exit()。然后应该检查FormClosed事件的参数。关闭的原因如下:
点击[X]:close = UserClosing
应用程序退出:CloseReason = ApplicationExitCall
你可以正确地处理它
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
if (e.CloseReason == CloseReason.ApplicationExitCall)
{
//Application.Exit();
}
else if (e.CloseReason == CloseReason.UserClosing)
{
//[X] was pressed
}
else
{
//Many other reasons
}
}
我想有一个更更干净的方法来处理你的问题。如果你提供一点更多的细节,我想有人能帮助你。