Событие Form.closed не запускается - PullRequest
2 голосов
/ 04 декабря 2010

Всякий раз, когда я нажимаю на кнопку закрытия красного креста формы, я хочу отобразить другую форму, но, несмотря на закрытие обработчика событий, я не могу открыть другую форму.

Вот как я пытаюсьоткройте другую форму:

private void Form1_Closed(object sender, System.EventArgs e)
{
     itemMaster.Show();

}

Может кто-нибудь сказать мне, как я могу включить мое требование?

Ответы [ 3 ]

5 голосов
/ 04 декабря 2010

Во-первых, вы должны использовать событие FormClosed вместо Closed:

Событие Closed устарело в версии .NET Framework2,0;вместо этого используйте событие FormClosed. - Страница MSDN для события Form.Closed

void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
    // ...
}

Во-вторых, убедитесь, что вы действительно подписались на Form1 '* FormClosed событие:

Form1.FormClosed += Form1_FormClosed;

Дизайнер Windows Forms должен был автоматически добавить аналогичную строку где-то в InitializeComponent.Если нет, вот почему ваш метод-обработчик не вызывается.

Если это по-прежнему не помогает, попробуйте обработать событие FormClosing вместо FormClosed.

4 голосов
/ 04 декабря 2010

Если вы запустили приложение со следующим заявлением:

Application.Run(new Form1());

Когда вы закроете Form1, ваше приложение закроется. Даже если вы откроете другую форму, она будет убита при выходе из приложения. Можете ли вы убедиться в этом, вставив точку останова в свой метод Form1_Closed и увидев, что точка останова достигнута?

Если это так, то происходит то, что ваш код выполняется, но поскольку приложение закрывается, ваша другая форма также закрывается, как только она открывается.

Чтобы исправить это, Hide() form1 вместо того, чтобы закрывать его. Обработка события Form_Closing, вызов this.Hide() и установка e.Cancel = true.

0 голосов
/ 28 октября 2014

Когда вы закончите работу с формой и захотите закрыть ее (например, нажав кнопку закрытия), обязательно используйте Close(). Мое form_closing событие не сработало, потому что я использовал только Dispose() при нажатии кнопки закрытия.

Я думаю, что лучший способ закрыть форму - это использовать Close() и Dispose().

  • Close() => если вам нужно что-то сделать при закрытии формы ...
  • Dispose() => уничтожить форму (очистить ресурсы).

    private void _btnClose_Click (отправитель объекта, EventArgs e) { Близко(); Dispose (); }

...