Несмотря на то, что некоторые события происходят как единичные события, действия пользователя могут инициировать срабатывание множества событий. Некоторые из этих событий происходят независимо; однако, последовательность некоторых событий фиксирована, например, последовательность событий при создании и разрушении объекта формы.

Когда последовательность событий инициирована для управляющего элемента, вся последовательность событий ассоциирована с этим управляющим элементом. Например, преположим, что вы щелкнули по левой клавише мыши на командной кнопке и затем потащили указатель мыши прочь от нее. Событие MouseMove командной кнопки продолжается даже если указатель мыши движется уже над формой. Если вы отпустите левую кнопку мыши над формой, а не над кнопкой, событие MouseUp, которое произойдет в этом случае будет связано с командной кнопкой, а не формой.

В приведенной ниже таблице показана общая последовательность событий Visual FoxPro, с учетом того, что свойство AutoOpenTables окружения данных установлено в True (.T.). Прочие событие могут происходит на основе взаимодействия пользователя и отклика на них системы.

Последовательность событий Visual FoxPro
Объект Наступившее событие

Data environment

BeforeOpenTables

Form set

Load

Form

Load

Data environment cursor(s)

Init

Data environment

Init

Objects 1

Init

Form

Init

Form set

Init

Form set

Activate

Form

Activate

Object1 2

When

Form

GotFocus

Object1

GotFocus

Object1

Message

Object1

Valid 3

Object1

LostFocus

Object2 3

When

Object2

GotFocus

Object2

Message

Object2

Valid 4

Object2

LostFocus

Form

QueryUnload

Form

Destroy

Object 5

Destroy

Form

Unload

Form set

Unload

Data environment

AfterCloseTables

Data environment

Destroy

Data environment cursor(s)

Destroy

1. Для каждого объекта, начиная с самого внутреннего до самого внешнего контейнера

2. Первый объект в порядке табуляции

3. Следующий объект, получающий фокус

4. После того, как объект потеряет фокус

5. Для каждого объекта начиная с наружного до внутреннего

Пример последовательности событий

Приведенный ниже пример использует форму для иллюстрации порядка, в котором наступают события в ответ на действия пользователя.

Образцовая форма

FoxProFormEvenSequence screenshot

В этом примере пользователь производит следующие действия:

  1. Запускает форму.

  2. Печатает текст в текстовом блоке Text1.

  3. Выбирает текст и копирует его в Clipboard.

  4. Перемещается в текстовый блок Text2, с помощью клавиши TAB.

  5. Вставляет скопированный текст в Text2.

  6. Закрывает форму, щелкнув на командной кнопке Command2.

Эти действия инициируют события для каждого объекта. В приведенной ниже таблице перечислены события, которые наступают в ответ на каждое действие пользователя.

NoteЗамечание

В этом примере, событие Paint было удалено из таблицы, так как это событие происходит часть и делает затруднительным просмотр последовательности другиз событий.

Действие 1

Пользователь запускает форму, впечатав приведенную ниже команду в командном окне:

  CopyCode imageСкопировать код
DO FORM form1 NAME frmObject

Visual FoxPro загружает форму, инициализирует каждый объект, затем инициализирует форму. Форма активизируется и первый тектовый блок получает фокус.

Объект Событие

DataEnvironment

BeforeOpenTables

Form1

Load

DataEnvironment

Init

Text1

Init

Text2

Init

Command1

Init

Command2

Init

Form1

Init

Form1

Activate

Form1

GotFocus

Text1

When

Text1

GotFocus

Действие 2

Пользователь печатает текст "Test" в текстовом блоке Text1. Каждое нажатие клавиши генерирует два события.

NoteЗамечание

Событие KeyPress получает два параметра: число, представляющее нажатую клавишу и состояние клавиш SHIFT, ALT и CTRL.

Объект Событие Параметры

Text1

KeyPress

(84 для "T", 1)

Text1

InteractiveChange

 

Text1

KeyPress

(101 для "e", 0)

Text1

InteractiveChange

 

Text1

KeyPress

(115 для "s", 0)

Text1

InteractiveChange

 

Text1

KeyPress

(116 для "t",0)

Text1

InteractiveChange

 

Действие 3

Пользователь выбирает текст в текстовом блоке Text1, используя двойной щелчок на тексте и копирует его в Clipboard, нажатиемby CTRL+C. События мыши и событие Click сопровождают событие DblClick.

NoteЗамечание

События MouseMove, MouseDown и MouseUp получают четыре параметра: число, указывающее нажатую клавишу мыши, состояние клавиши SHIFT, и (X, Y) координаты. Координаты X и Y выражены относительно формы и отражаются в единицах, определяемый режимом масштаба формы, например, в пикселях. Хотя здесь указано только одно событий MouseMove  для каждого управляющего элемента, в действительности, такое событие может наступать до полдюжины раз и более.

Объект Событие Параметры

Form1

MouseMove

(0, 0, 100, 35)

Text1

MouseMove

(0, 0, 44, 22)

Text1

MouseDown

(1, 0, 44, 22)

Text1

MouseUp

(1, 0, 44, 22)

Text1

Click

 

Text1

MouseDown

(1, 0, 44, 22)

Text1

MouseUp

(1, 0, 44, 22)

Text1

DblClick

 

Действие 4

Пользователь перемещается в текстовый блок Text2, путем нажатия клавиши TAB.

Объект Событие Параметры

Text1

KeyPress

(9, 0)

Text1

Valid

 

Text1

LostFocus

 

Text2

When

 

Text2

GotFocus

 

Действие 5

Пользователь вставляет скопированный текст в текстовый блок Text2, нажатием сцепления CTRL+V.

Объект Событие

Text2

InteractiveChange

Действие 6

Пользователь щелкает на командной кнопке Command2, для того, чтобы закрыть форму.

Объект Событие Параметры

Form1

MouseMove

 

Command2

MouseMove

 

Text2

Valid

 

Command2

When

 

Text2

LostFocus

 

Command2

GotFocus

 

Command2

MouseDown

(1, 0, 143, 128)

Command2

MouseUp

(1, 0, 143, 128)

Command2

Click

 

Command2

Valid

 

Command2

When

 

Когда форма закрывается и освобождаются объекты, то имеют место дополнительные события по сравнению со списком событий, перечисленных для действия 1.

Объект Событие

Form1

Destroy

Command2

Destroy

Command1

Destroy

Text2

Destroy

Text1

Destroy

Form1

Unload

DataEnvironment

AfterCloseTables

DataEnvironment

Destroy

Смотрите также