Каждый, кто пишет программы на C# с использованием форм, обязан знать, какие события происходят в момент создания и уничтожения формы. Здесь я приведу краткий список тех событий, в хронологическом порядке, которые возникают когда форма открывается, закрывается, становится видимой или переходит в состояние невидимости.
Событие | Видна | IsDisposed |
---|---|---|
Вызов метода form.Show() |
Нет |
Нет |
Control.HandleCreated |
Нет |
Нет |
Control.BindingContextChanged |
Да |
Нет |
Form.Load |
Да |
Нет |
Control.VisibleChanged |
Да |
Нет |
Control.GotFocus |
Да |
Нет |
Form.Activated |
Да |
Нет |
Form.Shown |
Да |
Нет |
Как видите, форма появляется на экране уже вместе с событием Control.BindingContextChanged
При закрытии формы происходит следующий порядок
Событие | Видна | IsDisposed |
---|---|---|
Вызов метода form.Close() |
Да |
Нет |
Form.Closing |
Да |
Нет |
Form.FormClosing |
Да |
Нет |
Form.Closed |
Да |
Нет |
Form.FormClosed |
Да |
Нет |
Form.Deactivate |
Да |
Нет |
Control.LostFocus |
Да |
Нет |
Control.HandleDestroyed |
Да |
Нет |
Component.Disposed |
Нет |
Нет |
После события Disposed |
Нет |
Да |
Форма видна до выполнения события Disposed. Во время закрытия формы вы все еще можете прервать ее закрытие. События Closing и Closed не возникают, когда выполняется метод Application.Exit. События Deactivate и LostFocus возникают только, если форма имела фокус. И запомните, что только после события Disposed форма помечается как IsDisposed.
Во время скрытия формы происходят следующие события.
Событие | Видна |
---|---|
Установка form.Visible = false |
Да |
Form.Deactivate |
Да |
Control.LostFocus |
Да |
Control.VisibleChanged |
Нет |
События Deactivate и LostFocus происходят, только если форма имела фокус. Иначе, они не возникают.
Когда форма из невидимого состояния переходит в видимое.
Событие | Видна |
---|---|
Установка form.Visible = true |
Нет |
Control.VisibleChanged |
Да |
Control.GotFocus |
Да |
Form.Activated |
Да |