关闭子窗体时如何防止父窗体关闭

时间:2018-12-19 12:34:13

标签: c# windows winforms windows-forms-designer

我在Winforms中创建了2个表单。我在Form1中有按钮,在Form2中有一些文本。 当单击表单中的按钮时,我通过单击事件来显示form2。当我关闭form2时,form1也将关闭。

但是我希望不关闭form1。

Form1代码:

    public Form1()
    {
        InitializeComponent();
        button1.Click += Button1_Click;
    }

    private void Button1_Click(object sender, EventArgs e)
    {
        var form = new Form2();
        form.Show();
    }

Form2:

仅显示名称和城市详细信息之类的信息。

我刚刚创建了一个简单的示例,因为我还处于起步阶段。

请分享您的想法和想法。

1 个答案:

答案 0 :(得分:0)

Form1应该记住它创建了哪个Form2。关闭Form2时,它应通知Form1,以便Form1可以取消对Form2的引用

private Form2 form2 = null;

void ShowForm2(...)
{
    if (this.form2 != null) return; // form2 already shown

    this.form2 = new Form2();
    // make sure you get notified if form 2 is closed:
    this.form2.FormClosed += onFormClosed;
}

void OnFormClosed(object sender, EventArgs e)
{
     if (object.ReferenceEquals(sender, this.form2)
     {
          // form2 notifies that it has been closed
          // form2 will Dispose itself
          this.form2 = null;
     }
}

Form1和Form2的整洁

注意:如果Form1是Closing,最好询问Form2是否允许使用Closing(也许是否需要询问操作员?)。如果Form2不想关闭,请取消关闭Form1。

如果允许关闭,请记住您正在关闭Form1和Form2。当Form2通知Form1它已关闭时,请检查您是否正在关闭,如果是,则重新启动关闭过程,这次将没有Form2,并且可以正常继续关闭。