Тайна исчезающей модальной формы - PullRequest
2 голосов
/ 14 декабря 2011

В этом проекте WinForms у меня есть определенная информационная форма (InfoForm), которая всплывает на 2 секунды, а затем исчезает.Я делаю это, вызывая

infoForm.Show();

и затем внутри InfoForm У меня есть Timer, который тикает через 2 секунды и звонит Close().

Теперь, иногда естьдругую форму ErrorForm Мне нужно показать модально (используя errorForm.ShowDialog()), чтобы сообщить пользователю, что произошла ошибка, и ему нужно нажать OK, прежде чем они смогут продолжить.Это может произойти, когда InfoForm открывается и закрывается, и одно не должно влиять на другое.

Но это так.

Я зашел настолько далеко, что установил точку останова на вызове на ShowDialog, и если InfoForm открыта в тот момент, когда я достиг точки остановазатем, когда я нажимаю «Перешагнуть», вместо того, чтобы вызвать ErrorForm и ждать, пока я нажму «ОК», отладчик просто переходит через строку и уже находится на следующей строке, как если бы форма никогда не открывалась.Между тем в фоновом режиме InfoForm закрылся, поэтому, если я переустановил точку выполнения для вызова на ErrorForm.ShowDialog(), а затем «Шаг за шагом», форма появится, как и ожидалось, и ждет, пока я не нажму «ОК», прежде чемпереход к следующему утверждению.

Удаление точек останова и запись в журнал отладки подтверждает мое подозрение, что именно закрытие InfoForm вызывает преждевременное закрытие моего ErrorForm:

Тема 09 - 2011/12/14 16: 39: 30.574 - отображается информационная форма

Тема 09 - 2011/12/14 16: 39: 31.300 - До ErrorForm.ShowDialog

Тема 09 - 2011/12/14 16: 39: 32.584 - Тик таймера

Тема 09 - 2011/12/14 16: 39: 32.585 - Закрытие информационной формы

Тема 09 - 2011 /12/14 16: 39: 32.593 - Ошибка закрытия формы

Тема 09 - 2011/12/14 16: 39: 32.593 - После ErrorForm.ShowDialog

Почему это происходит,а что такое лекарство?

1 Ответ

6 голосов
/ 14 декабря 2011

Вы должны передать MainForm в качестве владельца ErrorForm.ShowDialog().

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