Последовательность
событий фокуса для элементов управления в формах
При установке
фокуса на элемент управления щелчком мыши, при нажатии клавиши
<Таb>
или при открытии формы происходят события:
Вход
(Enter) =>
Получение
фокуса
(GotFocus).
Когда элемент
теряет фокус, например при закрытии формы или переносе фокуса на другой элемент
управления той же формы, происходят события:
Выход
(Exit) =>
Потеря
фокуса
(LostFocus).
При переносе
фокуса в другую форму элемент первой формы теряет фокус, но не возникает события
Выход
(Exit). Соответственно, когда фокус переносится обратно, т. е.
к элементу, который уже имел фокус, когда форма последний раз была активной,
то не происходит события
Вход
(Enter), а только событие
Получение
фокуса
(GotFocus).
Замечание
В дальнейшем при описании последовательностей событий мы не будем приводить английские эквиваленты названий событий, дабы не загромождать представление. Кроме того, вводятся сокращения для обозначения объектов, к которым относится событие, например: э — элемент, ф — форма.
При переносе
фокуса из элемента управления в главной форме на элемент управления в подчиненной
форме события происходят в следующем порядке:
Выход
(г.ф., т.ф.)
=>
Потеря фокуса
(г.ф., т.ф.)
=> Вход
(г.ф., э.п.)
=> Выход
(п.ф., т.ф.)
=> Потеря фокуса
(п.ф., т.ф.)
=>
Вход "(п.ф.,
п.ф.) =>
Получение фокуса
(п.ф., п.ф.) Это самая сложная цепочка событий,
в которой задействованы сразу четыре элемента управления: г.ф., т.ф. — элемент
главной формы, теряющий фокус; г.ф., э.п. — элемент главной формы, содержащий
подформу; п.ф., т.ф. — элемент подформы, теряющий фокус (если мы переносим фокус
на тот элемент подформы, который до этого фокуса не имел); п.ф., п.ф. — элемент
подформы, принимающий фокус. Если перенос фокуса выполняется на элемент подчиненной
формы, который имел фокус, когда она последний раз была активной, то в цепочке
отсутствуют события:
Выход
(п.ф., т.ф.)
=> Потеря фокуса
(п.ф.,
т.ф.) => Вход
(п.ф., п.ф.).
Последовательность
событий изменения данных в элементе управления
Когда вводят
или изменяют данные в элементе управления, а затем переходят к следующему элементу
управления, возникает следующая цепочка событий:
{Клавиша вниз => Нажатие
клавиши => Внесены изменения ==> Изменение => Клавиша вверх}=> До
обновления
=э
После обновления => Выход
=>
Потеря фокуса
Фигурные скобки
в приведенном выражении означают, что выделенная цепочка событий возникает при
каждом нажатии клавиши на клавиатуре.
Еcли ввод
выполняется в поле со списком, то в конец последней цепочки, после события
Клавиша
вверх,
могут добавиться события
Отсутствие в списке
(NotlnList) и
Ошибка (Error), и цепочка будет выглядеть следующим образом:
Клавиша вниз
=> Нажатие клавиши => Внесены изменения => Изменение => Клавиша
вверх} =>
Отсутствие в списке => Ошибка
=>
До обновления
=> После обновления => Выход => Потеря фокуса
Последовательность
событий в форме, связанных с записями
Если просто
просматриваются записи в форме, то при переходе к каждой новой записи выполняются
событие
Текущая запись
(Current) для формы и все события, связанные с
установкой фокуса в элементах формы. Если данные в записи меняются, то сохранение
изменений происходит только при переходе к следующей записи или при закрытии
формы (если нашли нужную запись, изменили и закрыли форму). Поскольку все изменения
в записи происходят в элементах управления формы, одновременно будут возникать
соответствующие события в элементах формы. Рас-смотрим типичную ситуацию, когда
в форме выводится запись, в ней перемещаются по элементам управления до нужного
элемента, изменяют в нем данные и переходят к следующей записи. В этом случае
последовательность возникновения событий будет выглядеть так:
Текущая запись
(ф) => {Вход (э) => Получение фокуса (э) => Выход (э) => Потеря
фокуса (э)} =>
Вход (э) => Получение фокуса (э) => До обновления
(э) => После обновления (э) => До обновления (ф) => После обновления
(ф)
=>
Выход (э) => Потеря фокуса (э) => RecordExit => Текущая
запись (ф) => Вход (э) => Получение фокуса
(э)
В этой цепочке
для упрощения опущены все события клавиатуры, а фигурные скобки выделяют цепочки
событий, которые возникают при переходе между элементами управления формы. При
изменении данных события
До обновления
(BeforeUpdate) и
После обновления
(AfterUpdate) происходят сначала для элемента, а затем для формы. Затем
последний элемент (в данном случае тот, в котором происходили изменения) теряет
фокус, происходит событие
RecordExit
(Выход из записи), выводится следующая
запись, и фокус устанавливается на первый элемент в этой записи. События
До
обновления
(BeforeUpdate) и
После обновления
(AfterUpdate) всегда
возникают непосредственно перед переходом к следующей записи. После этого запись
(элемент управления, в котором перед этим находился фокус) теряет фокус.
Замечание
Если запись сохраняется с помощью команды меню Записи, Сохранить запись (Records, Save Record), то последних событий Выход (Exit) и Потеря фокуса (LostFocus) не происходит. Это полезно знать, т. к. иногда требуется обойти эти события.
При удалении
записи происходят события:
Удаление => До подтверждения Del
=>
После
подтверждения Del => Текущая запись => Вход => Получение фокуса
Если событие
Удаление
(Delete) отменяется, то остальные события не возникают. После
удаления записи фокус переходит на следующую запись, поэтому происходят события
Текущая запись
(Current) формы и
Вход
(Enter) и
Получение фокуса
(GetFocus) первого элемента в этой записи.
Добавление
новой записи осуществляется после того, как пользователь вводит первый символ
новой (пустой) записи. При этом события происходят в следующем порядке:
Текущая
запись (ф) => Вход (э) => Получение фокуса (э) => До вставки (ф) =>
Изменение (э) => До обновления (ф) => После обновления (ф) => После
вставки (ф)
В этой цепочке
пропущены все события клавиатуры и
До обновления
(BeforeUpdate) и
После
обновления
(AfterUpdate) для элементов формы, т. к. они описаны выше. Событие
Изменение
(Change) происходит, если первый символ новой записи вводится
в текстовое поле.
Последовательность
событий в формах
При открытии
формы происходит следующая цепочка событий:
Открытие => Загрузка =>
Изменение размера => Включение
=>
Текущая запись
=>
Вход
=> Получение фокуса
События
Вход
(Enter) и
Получение фокуса
(GetFocus) возникают для первого элемента
в первой записи. Если форма не имеет видимых или доступных элементов управления,
то последовательность событий несколько иная:
Открытие => Загрузка =>
Изменение размера => Включение => Получение фокуса => Текущая запись
В этом случае
событие
Получение фокуса
(GetFocus) относится к форме. При закрытии формы
последовательность событий следующая:
Выход => Потеря фокуса => Выгрузка
=> Отключение => Закрытие
То есть сначала
теряет фокус последний элемент в форме, а затем выполняются события для формы.
Если в форме не было видимых или доступных элементов, то последовательность
другая:
Выгрузка => Потеря фокуса (ф) => Отключение => Закрытие
При переключении
между двумя открытыми формами последовательность событий следующая:
Потеря
фокуса (э1) => Отключение (ф!) => Включение
(ф2)
=> Вход
(э2)
=> Получение фокуса (э2)
Если из открытой
формы открывают другую форму, то сначала в открываемой форме происходят события
Открытие
(Open),
Загрузка
(Load) и
Изменение размера
(Resize),
и только после этого в первой форме произойдет событие
Отключение
(Deactivate):
Открытие
(ф2) =>
Загрузка
(ф2) =>
Изменение размера
(ф2)
=>
Отключение (ф1) => Включение
(ф2)
=>
Текущая запись
(ф2)
Это дает возможность
проконтролировать открытие второй формы. Кроме того, событие
Включение
(Activate)
происходит каждый раз, когда форма получает фокус, а события
Открытие
(Open)
и
Загрузка
(Load) не происходят, если форма уже открыта, даже если переход
в эту форму выполняется с помощью макрокоманды ОткрытьФорму (Openform). Событие
Отключение
(Deactivate) для формы не происходит, если фокус переносится
в диалоговое окно.
Если открываемая
форма содержит подчиненные формы, то сначала загружаются подчиненные формы и
осуществляются все события в них, которые обычно происходят при открытии формы,
кроме события
Включение
(Activate) — оно не возникает. Затем загружается
главная форма в обычном порядке и для нее выполняется событие
Включение
(Activate).
Аналогично
при закрытии такой формы сначала выгружаются все подчиненные формы, но в них
не возникает событие
Отключение
(Deactivate). События при этом происходят
в следующем порядке:
Последовательность
событий клавиатуры и мыши
При нажатии
и отпускании любой клавиши на клавиатуре в том случае, если фокус находится
в одном из элементов управления формы, возникает следующая цепочка событий:
Клавиша вниз => Нажатие клавиши => Клавиша вверх
При щелчке
мышью на элементе управления формы, соответственно:
Кнопка вниз => Кнопка
вверх => Нажатие кнопки
Об особенностях
этих событий подробно говорилось выше при их описании, поэтому сейчас мы позволим
себе не повторяться.
Последовательность
событий в отчетах
В отчетах
события возникают только для самого отчета и его разделов. Для полей отчета
события отсутствуют. При выводе отчета на печать события обычно возникают в
следующей последовательности:
Открытие => Включение => {Формат =>
Печать} => Закрытие => Отключение
События
Форматирование
(format) и
Печать
(Print) относятся к разделам отчета и возникают
при обработке каждого раздела. Дополнительными событиями могут быть события: