如何在关闭父窗体之前先加载子窗体,而不同时关闭两个窗体

时间:2019-04-02 11:08:30

标签: c# visual-studio

我正在将Visual Studio 2017用于某个项目

如何在关闭父窗体而不关闭父窗体和父窗体之前先加载子窗体

这样做只会关闭应用程序而不会加载下一个表单:

private void button_Click(object sender, EventArgs e) {
    Form2 f2 = new Form2();
    f2.Show();
    this.Close();
}

编辑:问题重述

3 个答案:

答案 0 :(得分:2)

由于Application.Run(new Form1())中的Programm.cs,应用程序已关闭。

这是winforms应用程序的默认模板,假定您将仅使用一种(主)表单,关闭该表单将终止应用程序。

我假设您仅将表单称为父/子,但它们不是MDI,也没有设置Owner属性。而是两种形式,其中有条件地显示第二个(单击右按钮时)。可以通过DialogResult传递此条件。

将您的Main方法更改为:

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    // Application.Run(new Form1()); - don't use this anymore

    var form1 = new Form1();
    if(form1.ShowDialog() == DialogResult.XXX)
        (new Form2()).ShowDialog();
}

然后单击按钮事件:

void button_Click(object sender, EventArgs e) => DialogResult.XXX;

这将关闭表单并返回指定值。

如果没有其他OK没问题,则您必须choose return value自己。

答案 1 :(得分:1)

不理解您不使用“隐藏”的意思,因为这是最好的方法...

如果您不想使用“隐藏”,则可以使用“可见”并将其设置为false ...诸如此类:

this.Visible = false;
var form2 = new asas();
form2.Closed += (s, args) => this.Close();
form2.Show();

编辑:

您已经编辑了问题,并且没有提及有关hide的任何事情。

您可以执行以下操作:

this.Hide();
var form2 = new Form2();
form2.Closed += (s, args) => this.Close();
form2.Show();

绝对是执行此操作的最佳方法。显示其他表格并关闭旧表格。

答案 2 :(得分:0)

通常的方法是使用Form1.Hide(); 如果要这样做,可以在Program.cs中进行:

Application.Run(new Form1());之后添加:

Application.Run(new Form2());

这样做,当您关闭Form1时,Form2将被启动。

要关闭Form1,只需执行以下操作:

    private void button1_Click(object sender, EventArgs e)
    {
        Close();
    }

希望这会有所帮助。

编辑: 我读了你的编辑最好的解决方案可能是Mikev的答案。