Как я могу сделать приостановку выполнения до закрытия новой формы? - PullRequest
12 голосов
/ 05 декабря 2010

Я делаю приложение Win Forms, чтобы узнать больше, так как у меня нет большого опыта с ним. В моей программе, в основной форме, у меня есть кнопка. Нажатие на нее запускает другую форму. Код выглядит следующим образом:

 private void btn_AddCat_Click(object sender, EventArgs e)
        {
            this.Invoke(new MethodInvoker(() =>
            {
                form_NewCat NewCatForm = new form_NewCat();
                NewCatForm.Show();
            }));

            MessageBox.Show("Oops!");            
        }

Проблема в том, что при запуске новой формы я хочу, чтобы выполнение кода за основной формой приостанавливалось в этой точке до тех пор, пока новая форма не будет закрыта. В качестве примера, в приведенном выше коде я не хочу "Ой!" чтобы распечатать, пока новая форма не будет закрыта. Как мне этого добиться?

Ответы [ 4 ]

17 голосов
/ 05 декабря 2010

Изменить строку

NewCatForm.Show();

до

NewCatForm.ShowDialog();
12 голосов
/ 05 декабря 2010

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

private void btn_AddCat_Click(object sender, EventArgs e)
{
    form_NewCat NewCatForm = new form_NewCat();
    var dialogResult = NewCatForm.ShowDialog();
    MessageBox.Show("Oops!");            
}

Вы можете проверить dialogResult для OK, Отмена, Да, Нет и т. Д., Если ваш form_NewCat устанавливает this.DialogResult в любое значение перед закрытием. Это обычный способ указать, как пользователь вышел из формы / диалогового окна.

6 голосов
/ 05 декабря 2010

Вы хотите модальный диалог, и я думаю, что вам нужно NewCatForm.ShowDialog();

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

Просто измените Show на ShowDialog; это также позволяет вам получить возвращаемое значение, чтобы указать, считала ли форма самой себя выходящей с определенным статусом (хорошо, отмена и т. д.)

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