如何关闭C#程序,从第二种形式(不隐藏)C#Multiform问题

时间:2013-10-22 10:57:00

标签: c# winforms

问题:我创建了一个有两种形式的程序。在Form1上按下按钮时,程序“隐藏”Form1并“显示”Form2。问题是,当我关闭Form2时,程序继续在后台运行,我相信这是因为程序需要关闭Form1而不是隐藏以便程序结束。

我的问题是如何覆盖第二个表格以关闭程序而不是隐藏?

    private void btnCreate_Click(object sender, EventArgs e)
    {
        Form2.Show(); 
        Form1.Hide();
    }

我知道我可以再次从Form2中显示Form1,然后关闭,但我真的想避免这种情况。

3 个答案:

答案 0 :(得分:4)

根据您的应用程序的不同,您没有多少选择。

首先,直观的解决方案是为Close()调用Hide()而不是Form1。仅当Form1不是应用程序的 main 形式时(主要消息循环内部以Application.Run()开头),此方法才有效。

第二个解决方案是为FormClosed Form2事件添加事件处理程序,并在第二个表单关闭时关闭第一个表单:

private void btnCreate_Click(object sender, EventArgs e)
{
    Form2.Show();
    Form2.FormClosed += new FormClosedEventHandler(delegate { Close(); });
    Form1.Hide();
}

您可以直接关闭Form1或致电Application.Exit()(如果您打开多个表格,则要同时关闭所有表单。)

最后一个解决方案是从第一个解决方案中选择第二个所有者

private void btnCreate_Click(object sender, EventArgs e)
{
    Form2.Show();
    Form1.Owner = Form2;
    Form1.Hide();
}

当所有者关闭时,这将自动关闭所拥有的表单。这是我更喜欢的解决方案,但它仅适用于一种形式(所有者只能拥有一种形式)。

答案 1 :(得分:3)

您可以使用FormClosed事件:

    private void btnCreate_Click(object sender, EventArgs e)
    {
        Form2.Show();
        Form2.FormClosed += new FormClosedEventHandler(form2_FormClosed);
        Form1.Hide();
    }

    void Form2_FormClosed(object sender, FormClosedEventArgs e)
    {
        Form1.Close();
    }

答案 2 :(得分:0)

在应用程序开发中,特别是对于用户而言的winforms,总是有一个主表单(无论是mdiparent还是单个父表单),它始终是所有其他表单显示的主表单。

回答这个问题将会鼓励糟糕的编程实践。

让主窗口关闭,应用程序结束。隐藏form1不会结束申请。