Несмотря на то, что некоторые события происходят как единичные события, действия пользователя могут инициировать срабатывание множества событий. Некоторые из этих событий происходят независимо; однако, последовательность некоторых событий фиксирована, например, последовательность событий при создании и разрушении объекта формы.
Когда последовательность событий инициирована для управляющего элемента, вся последовательность событий ассоциирована с этим управляющим элементом. Например, преположим, что вы щелкнули по левой клавише мыши на командной кнопке и затем потащили указатель мыши прочь от нее. Событие MouseMove командной кнопки продолжается даже если указатель мыши движется уже над формой. Если вы отпустите левую кнопку мыши над формой, а не над кнопкой, событие MouseUp, которое произойдет в этом случае будет связано с командной кнопкой, а не формой.
В приведенной ниже таблице показана общая последовательность событий Visual FoxPro, с учетом того, что свойство AutoOpenTables окружения данных установлено в True (.T.). Прочие событие могут происходит на основе взаимодействия пользователя и отклика на них системы.
Объект | Наступившее событие |
---|---|
Data environment |
|
Form set |
|
Form |
|
Data environment cursor(s) |
|
Data environment |
|
Objects 1 |
|
Form |
|
Form set |
|
Form set |
|
Form |
|
Object1 2 |
|
Form |
|
Object1 |
|
Object1 |
|
Object1 |
Valid 3 |
Object1 |
|
Object2 3 |
|
Object2 |
|
Object2 |
|
Object2 |
Valid 4 |
Object2 |
|
Form |
|
Form |
|
Object 5 |
|
Form |
|
Form set |
|
Data environment |
|
Data environment |
|
Data environment cursor(s) |
1. Для каждого объекта, начиная с самого внутреннего до самого внешнего контейнера
2. Первый объект в порядке табуляции
3. Следующий объект, получающий фокус
4. После того, как объект потеряет фокус
5. Для каждого объекта начиная с наружного до внутреннего
Пример последовательности событий
Приведенный ниже пример использует форму для иллюстрации порядка, в котором наступают события в ответ на действия пользователя.

В этом примере пользователь производит следующие действия:
-
Запускает форму.
-
Печатает текст в текстовом блоке Text1.
-
Выбирает текст и копирует его в Clipboard.
-
Перемещается в текстовый блок Text2, с помощью клавиши TAB.
-
Вставляет скопированный текст в Text2.
-
Закрывает форму, щелкнув на командной кнопке Command2.
Эти действия инициируют события для каждого объекта. В приведенной ниже таблице перечислены события, которые наступают в ответ на каждое действие пользователя.
![]() |
---|
В этом примере, событие Paint было удалено из таблицы, так как это событие происходит часть и делает затруднительным просмотр последовательности другиз событий. |
Действие 1
Пользователь запускает форму, впечатав приведенную ниже команду в командном окне:
![]() | |
---|---|
DO FORM form1 NAME frmObject |
Visual FoxPro загружает форму, инициализирует каждый объект, затем инициализирует форму. Форма активизируется и первый тектовый блок получает фокус.
Объект | Событие |
---|---|
DataEnvironment |
|
Form1 |
|
DataEnvironment |
|
Text1 |
|
Text2 |
|
Command1 |
|
Command2 |
|
Form1 |
|
Form1 |
|
Form1 |
|
Text1 |
|
Text1 |
Действие 2
Пользователь печатает текст "Test" в текстовом блоке Text1. Каждое нажатие клавиши генерирует два события.
![]() |
---|
Событие KeyPress получает два параметра: число, представляющее нажатую клавишу и состояние клавиш SHIFT, ALT и CTRL. |
Объект | Событие | Параметры |
---|---|---|
Text1 |
(84 для "T", 1) | |
Text1 |
| |
Text1 |
(101 для "e", 0) | |
Text1 |
| |
Text1 |
(115 для "s", 0) | |
Text1 |
| |
Text1 |
(116 для "t",0) | |
Text1 |
|
Действие 3
Пользователь выбирает текст в текстовом блоке Text1, используя двойной щелчок на тексте и копирует его в Clipboard, нажатиемby CTRL+C. События мыши и событие Click сопровождают событие DblClick.
![]() |
---|
События MouseMove, MouseDown и MouseUp получают четыре параметра: число, указывающее нажатую клавишу мыши, состояние клавиши SHIFT, и (X, Y) координаты. Координаты X и Y выражены относительно формы и отражаются в единицах, определяемый режимом масштаба формы, например, в пикселях. Хотя здесь указано только одно событий MouseMove для каждого управляющего элемента, в действительности, такое событие может наступать до полдюжины раз и более. |
Объект | Событие | Параметры |
---|---|---|
Form1 |
(0, 0, 100, 35) | |
Text1 |
(0, 0, 44, 22) | |
Text1 |
(1, 0, 44, 22) | |
Text1 |
(1, 0, 44, 22) | |
Text1 |
| |
Text1 |
(1, 0, 44, 22) | |
Text1 |
(1, 0, 44, 22) | |
Text1 |
|
Действие 4
Пользователь перемещается в текстовый блок Text2, путем нажатия клавиши TAB.
Объект | Событие | Параметры |
---|---|---|
Text1 |
(9, 0) | |
Text1 |
| |
Text1 |
| |
Text2 |
| |
Text2 |
|
Действие 5
Пользователь вставляет скопированный текст в текстовый блок Text2, нажатием сцепления CTRL+V.
Объект | Событие |
---|---|
Text2 |
Действие 6
Пользователь щелкает на командной кнопке Command2, для того, чтобы закрыть форму.
Объект | Событие | Параметры |
---|---|---|
Form1 |
| |
Command2 |
| |
Text2 |
| |
Command2 |
| |
Text2 |
| |
Command2 |
| |
Command2 |
(1, 0, 143, 128) | |
Command2 |
(1, 0, 143, 128) | |
Command2 |
| |
Command2 |
| |
Command2 |
|
Когда форма закрывается и освобождаются объекты, то имеют место дополнительные события по сравнению со списком событий, перечисленных для действия 1.
Смотрите также
Задачи
Как: отслеживать последовательность событийКонцепции
События в Visual FoxProПрочие ресурсы
Привявзка событий к объектамПонимание событийной модели