Как предотвратить закрытие родительской формы при закрытии дочерней формы - PullRequest
0 голосов
/ 19 декабря 2018

Я создал 2 формы в Winforms.У меня есть кнопка в Form1 и некоторый текст в form2.Когда кнопка в форме нажата, я сделал, чтобы показать форму2 по событию click.Когда я закрываю форму 2, форма 1 также закрывается.

Но я хочу, чтобы форма 1 не закрывалась.

Код формы 1:

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

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

Форма 2:

Простое отображение деталей, таких как название и город.

Я только что создал простой пример, поскольку я на начальной стадии.

Пожалуйста, поделитесь своими идеями и мыслями.

1 Ответ

0 голосов
/ 19 декабря 2018

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 закрываетсябыло бы неплохо спросить Form2, разрешено ли закрытие (может быть, если нужно спросить оператора?).Если Form2 не хочет закрывать, отмените закрытие Form1.

Если закрытие разрешено, помните, что вы закрываете Form1 и закрываете Form2.Когда Form2 уведомляет Form1 о том, что она закрыта, проверьте, закрывали ли вы, и, если это так, перезапустите процедуру закрытия, на этот раз Form2 не будет, и закрытие может продолжаться в обычном режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...