Winforms - порядок загрузки и активированных событий - PullRequest
11 голосов
/ 16 сентября 2009

Один из наших пользователей отправил журнал для нашего приложения .NET Winforms, в котором указано, что событие Activated происходит до события Load. Я не думал, что это было возможно, и предположил, что Load всегда будет происходить до Activated.

Кто-нибудь еще наблюдал, как Activated происходило до Load?

Если так, почему и есть ли способ убедиться, что этого не произойдет?

Ответы [ 3 ]

20 голосов
/ 16 сентября 2009

С Порядок событий в Windows Forms на MSDN:

Запуск и завершение работы приложения События

Классы Form и Control раскрывают набор событий, связанных с приложением запуск и выключение. Когда Windows Запускается приложение форм, запускается события основной формы поднимаются в следующий порядок:

System.Windows.Forms.Control.HandleCreated

System.Windows.Forms.Control.BindingContextChanged

System.Windows.Forms.Form.Load

System.Windows.Forms.Control.VisibleChanged

System.Windows.Forms.Form.Activated

System.Windows.Forms.Form.Shown

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

System.Windows.Forms.Form.Closing

System.Windows.Forms.Form.FormClosing

System.Windows.Forms.Form.Closed

System.Windows.Forms.Form.FormClosed

System.Windows.Forms.Form.Deactivate

Используете ли вы MessageBox в каких-либо ваших событиях запуска? Это может привести к тому, что события будут появляться не по порядку из-за того, как цикл сообщений Windows Forms обрабатывает диалоговые окна.

2 голосов
/ 27 ноября 2009

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

2 голосов
/ 16 сентября 2009

Активируется до загрузки. Если вы хотите написать некоторый код, который должен выполняться после загрузки, вы можете использовать метод Shown.

Ниже приведена последовательность:

  • Активированный
  • Load
  • Выводится

РЕДАКТИРОВАТЬ: Пожалуйста, отметьте этот очень интересный ответ на SO, который объясняет загрузку WinForms против показанных событий

РЕДАКТИРОВАТЬ: я теперь создал один по умолчанию Winform проект с одной winform. Теперь это дает мне последовательность

  • Load
  • Активированный
  • Выводится

Я сейчас растерялся.

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