正确关闭二级表格与申请出口

本文关键字:表格 二级 出口 | 更新日期: 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
    }
}

我想有一个更更干净的方法来处理你的问题。如果你提供一点更多的细节,我想有人能帮助你。