2

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

我的问题是如何覆盖第二种形式来关闭程序而不是隐藏?

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

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

4

3 回答 3

7

根据您的应用程序的情况,您几乎没有选择这样做。

第一个直观的解决方案是调用Close()而不是Hide()for Form1。这仅适用Form1于不是您的应用程序的主要形式(主消息循环内部以 开头的形式Application.Run())。

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

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();
}

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

于 2013-10-22T11:12:28.600 回答
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();
    }
于 2013-10-22T11:05:05.260 回答
0

在应用程序开发中,尤其是为用户着想的 winforms,始终有一个主窗体(无论是 mdiparent 还是单父窗体),它将始终是所有其他窗体显示的主窗体。

给出问题的答案将鼓励不良的编程实践。

让主窗体关闭,应用程序将结束。隐藏 form1 不会结束应用程序。

于 2013-10-22T11:21:18.217 回答