Windows формы Форма закрытое событие не работает с открытием новой формы - PullRequest
0 голосов
/ 25 апреля 2019

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

Я пробовал несколько разных способов для открытия новой формы в форме.FormClosed событие.

Вот код, который у меня сейчас есть:

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
    Form1 myForm = new Form1();
    myForm.Show();
}

Но все же я не получаю ошибок, ничего.

Я ожидаю новогоокна открываются, когда я закрываю другое.Любая помощь будет оценена, спасибо!

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Возможно, что-то простое, чтобы продвинуться вперед.

private Form1 myForm = new Form1(); //Declare the form as a private member variable

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
    e.Cancel = true;       //Cancel the closing so this object stays alive
    this.Visible = false;  //Hide this form
    myForm.Show();         //Show the next form
}

Обратите внимание на комментарий @pcdevs. Вам потребуется указать, что форма закрывается / приложение закрывается, а переход к следующему шагу / форме. Возможно, вы захотите взглянуть на некоторые статьи CodeProject о «мастерах C # Winform», этих последовательных приложениях с диалоговыми окнами ...

0 голосов
/ 26 апреля 2019

Проблема в том, что как только первый экземпляр Form1 закрывается, приложение закрывается и завершает работу, поскольку цикл сообщений приложения определен с исходным экземпляром Form, и он просто ожидает события в этой форме, покаэто закрывается.После закрытия приложение закроется, открытие новой формы не остановит этот процесс.

Вам необходимо настроить метод Main() в Program.cs, чтобы он выглядел примерно так:

[STAThread]
static void Main()
{
    // ... Application configuration as required here

    new Form1().Show(); // The first form instance is now no longer bound to the Application message loop.  Start it before we begin the run loop
    Application.Run(); // Don't pass in Form1
}

Ваш оригинальный код теперь должен работать.Могу добавить, однако, что это не очень хороший пользовательский опыт.Тщательно продумайте, чего вы пытаетесь достичь, и, возможно, рассмотрите альтернативы - вам просто нужна кнопка «перезагрузить форму»?Или основная цель - не дать пользователю закрыть приложение?Если последнее, вы можете удалить значок закрытия в целом.

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