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

本文关键字:隐藏 多形式 问题 程序 何关闭 第二个 | 更新日期: 2023-09-27 18:36:27

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

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

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

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

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

根据

应用程序的情况,您几乎没有选择来执行此操作。

第一个直观的解决方案是调用Close()而不是Hide() Form1。仅当Form1不是应用程序的主要形式(主消息循环中的主消息循环以 Application.Run() 开头)时,这才有效。

第二种解决方案是为 Form2FormClosed事件添加一个事件处理程序,并在第二个窗体关闭时关闭第一个窗体:

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

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

您可以使用

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

在应用程序开发中,特别是为了用户的利益,始终有一个主窗体(无论是 mdiparent 还是单个父窗体),该窗体将始终是所有其他窗体显示的主窗体。

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

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