Форма
Форма: управление и события жизненного цикла
Управление жизненным циклом и отображением форм осуществляется следующими методами:
Form.Show(), Form.ShowDialog(), Form.Activate(), Form.Hide(), Form.Close().
Имеет смысл рассмотреть события, связанные с созданием, функционированием и уничтожением формы. К их числу относятся:
- Load. Генерируется ОДИН РАЗ, непосредственно после первого вызова метода Form.Show() или Form.ShowDialog(). Это событие можно использовать для первоначальной инициализации переменных и для подготовки формы к работе. Сколько в приложении форм, столько раз будет генерироваться это событие. Назначение максимальных и минимальных размеров формы – для этого более подходящего места, нежели обработчик события OnLoad, не найти!
- Activated. Многократно генерируется в течение жизни формы, когда Windows активизирует данную форму. Связано с получением и потерей фокуса. Все необходимые мероприятия выполняются здесь. Методы Form.Show(), Form.ShowDialog(), Form.Activate() (передача фокуса, реализованная программно!) способствуют этому. Передача фокуса элементу управления (кнопка – это тоже окно) сопровождается автоматическим изменением цвета элемента управления.
- VisibleChanged. Генерируется всякий раз при изменении свойства Visible -формы — когда она становится видимой или невидимой. Событию способствуют методы Form.Show(), Form.ShowDialog(), Form.Hide(), Form.Close().
- Deactivated. Возникает при потере фокуса формой в результате взаимодействия с пользовательским интерфейсом либо в результате вызова методов Form.Hide() или Form.Close() – но только для активной формы. Если закрывать неактивную форму, событие не произойдет! Сказано, что Activated и Deactivated возбуждаются только при перемещении фокуса в пределах приложения. При переключении с одного приложения на другое эти события не генерируются.
- Closing. Непосредственно перед закрытием формы. В этот момент процесс закрытия формы может быть приостановлен и вообще отменен, чему способствует размещаемый в теле обработчика события следующий программный код: e.Cancel = true; // e – событие типа CancelEventArgs.
- Closed. Уже после закрытия формы. Назад пути нет. В обработчике этого события размещается любой код для "очистки" (освобождения ресурсов) после закрытия формы.
Форма: контейнер как элемент управления
Container controls – место для группировки элементов пользовательского интерфейса. И это не простая группировка! Контейнер может управлять доступом к размещаемым на его поверхности элементам управления. Это обеспечивается за счет свойства Enable, которое, будучи установленным в false, закрывает доступ к размещаемым в контейнере компонентам. "Поверхность" контейнера у некоторых его разновидностей не ограничивается непосредственно видимой областью. Здесь могут быть полосы прокрутки.
Каждый контейнер поддерживает набор элементов, который состоит из всех вложенных в него элементов управления. У контейнера имеется свойство Count, которое возвращает количество элементов управления, свойство [ИНДЕКСАТОР], методы Add и Remove.
К числу контейнеров относятся:
- Form... Без комментариев!
- Panel. Элемент управления, содержащий другие элементы управления. Может быть использован для группировки множества элементов управления, как, например, группа для множества RadioButton. По умолчанию внешний вид панели НЕ ИМЕЕТ рамок. Нет у ПАНЕЛИ и заголовка. Рамки можно заказать. Для этого в классе панели используется свойство BorderStyle. ПАНЕЛЬ является производным классом от ScrollableControl, а это значит, что можно заказать для нее собственные полосы прокрутки путем изменения значения соответствующего свойства.
- GroupBox. Предполагается для размещения радиокнопок и прочих переключателей. Рисует рамочку вокруг элементов управления, которые группируются по какому-либо признаку. В отличие от панели, имеет заголовок, который, впрочем, можно не использовать. Не имеет полос прокрутки.
- TabControl. Содержит tab pages, они представлены TabPage -объектами, которые могут добавляться через свойство Controls. Каждая TabPage -страница подобна листку записной книжки: страница с закладкой. В зависимости от того, подцеплены ли tab pages к объекту – представителю класса TabControl, будут генерироваться следующие события: Control.Click, Control.DoubleClick, Control.MouseDown, Control.MouseUp, Control.MouseHover, Control.MouseEnter, Control. MouseLeave и Control.MouseMove. Следует иметь в виду, что при взаимодействии пользователя со страницей генерируются одни события, при взаимодействии с "корешком" элемента управления – другие.
Разница между элементами управления и компонентами
Элемент управления имеет видимое представление и непосредственно используется в процессе управления формой. Компоненты (таймер, провайдеры дополнительных свойств) видимого представления не имеют и поэтому в управлении формой участвуют опосредованно.
Свойства элементов управления. Anchor и Dock
Это средства, которые обеспечивают стыковку и фиксацию элементов управления в условиях изменяемых размеров контейнера.
Anchor позволяет автоматически выдерживать постоянное расстояние между границами элемента управления, для которого оно определено, и границами контейнера. И это обеспечивается за счет автоматического изменения размеров "зацепленного" элемента управления вслед за изменениями размеров контейнера. Таким образом обеспечивается реакция элемента управления на изменения контейнера.
Dock – стыковка, прикрепление элемента управления к границе контейнера. Dock – свойство элемента управления, а не контейнера. Центральный прямоугольник приводит к тому, что элемент управления заполнит всю поверхность контейнера.