这可能是一个标准问题。我已经阅读了很多这方面的文章,但没有人指出我具体的问题。
我正在开发一个WinForm并且有一个在启动时加载的“主菜单”表单。在这个主要内容中有几个按钮,用于打开程序的各个模块(其他形式)。
我可以打开表单没问题,可以关闭它并重新显示主表单没问题。问题在于当用户点击控制框中的(X)时,应用程序不会退出,因为主窗体仍在那里,但是隐藏了。我知道我可以在表单的close事件中放入application.exit()。但是,如果我有一个关闭表单并希望取消隐藏主表单的按钮,则应用程序将因formclosing事件而关闭。
有人可以帮助我理解这个原则。我不认为它应该像我看起来那么难,我真的不想使用Panels。
提前致谢。
-Joseph
以下代码根据下面提供的答案解决了问题
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();
}
}
答案 0 :(得分:3)
您可以查看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();
}
}
单击关闭按钮时,您将首先取消隐藏主窗体,然后关闭当前窗体。
答案 1 :(得分:0)
我仍然不明白你的问题,但我想你可以使用 Application.Exit()。 然后,您应该检查FormClosed事件的参数。 关闭原因如下:
点击[X]: CloseReason = 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
}
}
我想处理您的问题有很多更清洁的方式。 如果您提供了一些更多详情,我认为有人可以帮助您。