4.2.2. Основные методы форм
Рассмотрим основные методы, управляющие отображением формы и доступом к ней. Каждый из этих методов содержится в классе System.Windows.Forms.Form или унаследован им от классов – предков.
[C#]
public void Show ();
public void Hide ();
Выполнение этих методов эквивалентно присвоению свойству формы Visible соответственно значений true и false.
public System.Windows.Forms.DialogResult ShowDialog ();
Показывает форму на экране в модальном режиме. Пока данная форма не закрыта, другие формы этого приложения не могут получить фокус ввода. При закрытии формы, в зависимости от программного кода и действий пользователя, метод ShowDialog может возвратить одно из значений перечисления DialogResult: Abort, Cancel, Ignore, No, None, OK, Retry, Yes.
public void Activate ();
При выполнении этого метода форма активизируется и получает фокус ввода. Если же при этом само приложение неактивно, значок окна этого приложения на панели задач начинает мигать. В любом случае активизировать можно только видимую форму. Если вызвать этот метод из невидимой формы, он просто вернет управление.
public void Close ();
Закрывает форму и удаляет ее из памяти. Точнее, освобождает все удерживаемые формой ресурсы и помечает ее как мусор. После успешного вызова метода Close форму уже нельзя сделать видимой. Вызов Close для стартовой формы приложения завершает данное приложение.
4.2.3. Применение событий формы
Как говорилось ранее, события – это члены класса (или структуры), отражающие некоторые знаменательные явления, происходящие с программой. События могут обрабатываться компонентами приложения, которые называются обработчиками. Например, описанные выше методы форм при выполнении генерируют одно или несколько событий.
Если программист хочет заставить приложение выполнять некоторые действия в ответ на событие, он пишет обработчик события (event handler) – метод, исполняемый при генерации события. Обработчик события, генерируемого формой (или другим типом), можно создать средствами Visual Studio .NET или напрямую, редактируя код.
Кратко ознакомимся с основными событиями формы (или унаследованными ею). Это так называемые события ее жизненного цикла.
public delegate void System.EventHandler (object sender, EventArgs e);
[C#]
public event EventHandler Load;
Здесь public, как обычно, задает уровень доступа для члена класса. Ключевое слово event означает, что этот член относится к событиям. System.EventHandler – тип события, фактически задающий тип метода – обработчика для этого события.
Итак, событие Load генерируется, когда экземпляр формы впервые появляется на экране (загружается), то есть при первом вызове метода Show или ShowDialog. Это событие происходит единственный раз в жизненном цикле каждого экземпляра формы. Обычно в обработчике события Load инициализируют переменные формы и подготавливают ее к работе.
Класс System.EventArgs не содержит данных. Он используется для событий, обработчики которых не получают никакой информации о состоянии отправителя события. Этот класс является общим предком для других классов, передающих дополнительную информацию о событиях.
public event EventHandler Activated;
public event EventHandler Deactivate;
Событие Activated может срабатывать многократно в течение жизни экземпляра формы. Оно генерируется, когда форма получает фокус. Обработчик события Activated можно применять, например, для автоматической передачи фокуса определенному элементу управления формы.
Событие Deactivate генерируется, когда форма теряет фокус. Это событие можно применять для проверки данных, введенных пользователем.
События Activated и Deactivate происходят только при перемещении фокуса в пределах данного приложения; если переключиться на другое приложение и обратно, ни одно из них не сработает.
public event EventHandler VisibleChanged;
Как следует из имени, это событие генерируется при изменении свойства Visible формы, то есть когда форма становится видимой или невидимой.
public delegate void System.ComponentModel.CancelEventHandler (
object sender, CancelEventArgs e);
public event CancelEventHandler Closing;
Событие Closing генерируется, когда текущая форма начинает закрываться (но еще не закрыта). Это происходит, например, при вызове метода Close или щелчке кнопки закрытия формы. В обработчике можно проверить, все ли необходимые действия выполнены пользователем, заполнены ли все обязательные поля и т.п. В зависимости от результатов проверки, можно прервать процесс закрытия и оставить форму открытой. Для этого обработчик получает соответствующий параметр CancelEventArgs (недаром событие Closing имеет другой тип по сравнению с рассмотренными выше). Например, в обработчике можно написать
e.Cancel = true;
В результате форма останется открытой.
public event EventHandler Closed;
Данное событие генерируется после закрытия формы, вслед за событием Closing и выполнением его обработчиков. Событие Closed позволяет выполнить любой код для очистки после закрытия формы. Если обработчик события Closing прервет закрытие формы, то Сlosed не сработает.
