Получение справки по событиям
В справочной системе Visual Basic можно найти справку о любом событии, поддерживаемом элементом. На следующем рисунке показана справка по событию Activate.
Вместо того чтобы искать название события в справочной системе, можно выделить его в правом списке (при этом фокус ввода должен находиться именно в списке, а не в окне программы) и нажать клавишу F1.
Список достаточно обширен, причем смысл некоторых событий нетрудно понять по имени — например, это относится к событиям Activate и Load. Сначала может показаться, что вы активизируете форму для того, чтобы отобразить ее на экране. Тем не менее перед выполнением каких-либо действий с формой необходимо загрузить ее в память. Загруженную форму можно активизировать и деактивизиро-вать по своему усмотрению. Конечно, все зависит от конкретной природы приложения, над которым вы работаете, но во многих случаях можно ограничиться описанными далее событиями и обойтись без других, менее распространенных.
Событие Activate
Событие Activate отчасти напоминает рассматриваемое ниже событие Load. Существует еще пара событий, с которыми его иногда путают, — Initialize и GotFocus. Вы можете подумать, что активизация и инициализация формы — одно и то же, но на самом деле это не так. Форма обычно активизируется после инициализации, и лишь после этого ей передается фокус.
Между этими событиями существуют достаточно тонкие отличия, причем главное из них — порядок, в котором события происходят в приложении. Этот порядок выглядит так:
Initialize. Событие происходит во время конфигурации и до загрузки формы.
Load. Событие происходит после инициализации формы, но до ее отображения на экране. Добавляя код в процедуру события Load, вы можете настроить внешний вид или поведение формы.
Activate. Событие Activate происходит после загрузки формы в память, но до того, как форма станет активной.
GotFocus. Это событие, если оно вообще происходит, возникает при получении фокуса формой - когда форма загружается или когда пользователь обращается к ней, щелкая мышью.
После открытия формы из перечисленных событий могут произойти лишь GotFocus или Activate, хотя в отдельных, очень специфических, случаях может произойти и событие Initialize.
Оно происходит в тот момент, когда Visual Basic впервые узнает о существовании формы. В режиме выполнения это случается сразу же после команды Run > Start. За ним следует событие Load - оно соответствует моменту, когда Visual Basic загружает форму с диска или из дискового кэша в памяти. После загрузки формы и передачи ей фокуса (иначе говоря, при активизации формы) происходит событие Activate. Через считанные миллисекунды после него следует событие GotFocus.
Тем не менее последнее может произойти лишь в том случае, если на форме нет ни одного видимого элемента. Если же на форме присутствует хотя бы один видимый элемент, то фокус получит он, а событие Got Focus формы будет пропущено — вместо него будет вызвано событие Got Focus элемента. Следовательно, в нормальной ситуации при запуске приложения вызывается событие Load первой отображаемой формы, за которым следует Activate. Разумеется, приложение может иметь и другие окна. Когда пользователь или программа снова переключится в первое окно, снова будет вызвано событие Activate, но на этот раз без Load. Впрочем, событие Load все же происходит, если форма была выгружена во время выполнения программы.
Подведем итоги: при запуске приложения происходит событие Load, а за ним следует событие Activate. Когда фокус переходит к другой форме и снова возвращается к первой (и если она не была предварительно выгружена), снова происходит событие Activate, но уже без предварительного события Load.
Событие Deactivate
Событие Deactivate по смыслу противоположно Activate. Оно происходит в том случае, если форма перестает быть активной. В зависимости от выбранной цветовой схемы Windows цвет заголовка формы может измениться (например, стать более светлым).
Событие DragDrop
Событие происходит в тот момент, когда перетаскиваемый элемент «сбрасывается» на форму. Если запустить программу Hello World и попробовать перетащить кнопку, ничего не случится. Чтобы событие DragDrop стало возможным, прежде всего необходим элемент, который можно перетаскивать. Тема перетаскивания более полно рассматривается в уроке И, «Работа с мышью», но если вас одолевает любопытство, выполните следующие действия:
1. В окне свойств найдите свойство DragMode кнопки и задайте значение Automatic.
2. Существует и другой способ: выберите значок для свойства Drag Icon, дважды щелкнув на нем в окне свойств.
3. Дважды щелкните на форме, чтобы открыть окно программы.
4. Выберите событие DragDrop из раскрывающегося списка событий в верхней части окна программы.
5. Наконец, добавьте следующий оператор в процедуру DragDrop формы:
Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)
Print "Элемент сброшен"
End Sub
ПРИМЕЧАНИЕСобытие DragDrop происходит лишь в том случае, если у вас имеется объект, подходящий для перетаскивания. Многие объекты обычно не годятся для этой цели — например, трудно представить себе перетаскиваемую кнопку. Для других объектов (графических полей со значками или строк списков) перетаскивание разрешается. Если вы слабо разбираетесь в механизме перетаскивания, перед выбором перетаскиваемых элементов стоит рассмотреть примеры из других приложений Windows.
Событие Load
Событие Load происходит после события Initialize, но перед Activate при загрузке формы в память с диска или из дискового кэша. Это очень важное событие, к тому же оно часто используется. В нем удобно определять некоторые атрибуты формы — например, оно нередко применяется для выравнивания формы по центру экрана.