关闭另一个表单时显示表单

时间:2018-05-01 11:32:14

标签: c# winforms events

单击一个按钮(在主窗体中),我会显示一个(第二个)表单,它对存档文件进行一些解析(解压缩,提取,获取信息等)。完成此过程后,我关闭第二个(解析)表单并显示另一个(第三个)表单,其中包含来自存档的已解析信息。

点击回调如下所示:

private void ParseInputBackupButton_Click(object sender, EventArgs e)
{
    Form PBF = new ParseBackupForm();
    Form CBF = new CreateBackupForm();
    PBF.FormClosed += delegate
    {
        CBF.ShowDialog();
    };
    PBF.ShowDialog();
}

和第二种形式:

private void ParseBackupForm_Load(object sender, EventArgs e)
{
    new Thread((ThreadStart)delegate
    {

        // parse and update form

        this.Invoke((MethodInvoker)delegate
        {
            this.Close();
        });

    }).Start();
}

问题是当第三种形式(CreateBackupForm)出现时,第二种形式(ParseBackupForm)没有关闭。他们都出现了。如果我没有显示第三个表格,则第二个表格会关闭。

screenshot of the forms

我做错了什么?

3 个答案:

答案 0 :(得分:1)

据我所知,.ShowDialog()是一种阻止方法,所以会阻止其他表单完成其close方法,直到该表单也被关闭为止?

非常确定您可以使用.Show()使表单无阻塞地显示?

答案 1 :(得分:1)

当你在两个窗口上调用ShowDialog时,你不能一个接一个地打电话给他们吗?

PBF.ShowDialog();
CBF.ShowDialog();

在PBG对话框关闭之前,不会进行第二次调用。

编辑:第二个表单未关闭的原因是您正在订阅表单在关闭时引发的事件,然后在该委托中调用ShowDialog来阻止表单实际关闭。

答案 2 :(得分:0)

您可以开始调用CBF.ShowDialog();的调用,从而不会阻止完成FormClosed回调方法和关闭PBF表单。