Вы можете использовать привязку события для инициирования событий, свойств или методов родных объектов Visual FoxPro из других объектов Visual FoxPro с помощью следующих функций:

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

Для получения подробной информации о привязке событий из объектов Component Object Model (COM), смотрите описание Привязка событий для COM объектов и Функция EVENTHANDLER().

Привязка события

Вы можете использовать функцию BINDEVENT() для присоединения или, иными словами, привязки события, метода или свойства из одного объекта Visual FoxPro, или источника события, методу или событию другого объекта Visual FoxPro или обработчику события. Метод, который обрабатывает событие, действует как "делегат" для обработчика события.

Вы можете привязаться к любому действительному методу или событию объекта Visual FoxPro, включая методы Access и Assign. Однако, оба, и источник события, и обработчик события должны быть действительными объектами Visual FoxPro. Вы не можете использовать COM объекты или привязываться к методам объектов в коллекциях, ссылаемых по системной переменной _VFP поскольку эти коллекции также посылаются через COM.

NoteЗамечание

Когда вы указываете объекты для привязки событий, убедитесь, что их создание завершено. Не привязывайте события, метода или свойства к объектам в их событиях Load или Init поскольку объект может быть еще не полностью создан, что может вызвать отказ операции привязки.

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

  CopyCode imageСкопировать код
BINDEVENT( Form1, "Resize", Form1, "myresize1" )

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

Вы можете привязать множество обработчиков события к одному и тому же источнику события и событие в действии ссылается Вы можете подключить несколько обработчиков событий на одно и то же событие тем самым организуя шикоровещательные (multi-casting) оповещения. Если для одного и того же события определено множество обработчиков, то событие произойдет в первом из них, согласно правилу стэка (FIFO).

Вы можете привязать множество методов-делагатов из обработчика события к конкретному источнику события или событию. Например:

  CopyCode image Скопировать код
BINDEVENT( Form1, "Resize", oHandler, "myresize1" )
BINDEVENT( Form1, "Resize", oHandler, "myresize2" )

Вы не можете привязаться к событию с параметрами, которые посылаются по ссылке. Несмотря на то, что вызов BINDEVENT( ) выполнится успешно, инициирование события, например, с помощью RAISEEVENT( ) потерпит неудачу.

Visual FoxPro не поддерживает привязку событий в дизайнерах, таких как дизайнеры форм и классов, насмотря на то, что вы можете получить объектную ссылку с помощью функций ASELOBJ( ) или SYS(1270).

Для получения более подробной информации смотрите описание функций BINDEVENT(), ASELOBJ() и SYS(1270) - Местонахождение объекта. Описание образца решения вы найдете в Образец решения - привязка событие, их инициирование и освобождение, извлечение информации о событии.

Освобождение события

Вы можете использовать функцию UNBINDEVENTS() для отсоединения событий, методов и свойств, которые были привязаны с помощью функции BINDEVENT() из родных объектов Visual FoxPro. UNBINDEVENTS() возвращает число событий, которые были освобождены, если исполнение функции было успешным. Вы можете указать объект источника события Visual FoxPro или объектную ссылку, которая может быть использована в качестве источника события или обработчика события.

Для получения более подробной информации смотрите описание функции UNBINDEVENTS().

Поднятие (инициирование) события

Вы можете использовать функцию RAISEEVENT() для инициирования или вызова срабатывания события для пользовательских или родных методов. Непосредственный вызов методов не производит срабатывания события, до тех пор, пока вы не установите соответсвующие флаги при использовании BINDEVENT() для подключения события к другим объектам. Поэтому вам необходимо использовать RAISEEVENT() для инициирования срабатывания таких событий.

Для получения более подробной информации смотрите описание функции RAISEEVENT().

Извлечение информации о привязке события

Вы можете использовать функцию AEVENTS() для извлечения числа событий Visual FoxPro, которые привязаны в данный момент времени к объектам Visual FoxPro. Visual FoxPro сохранит эту информацию в массиве. В зависимости от переданных параметров, AEVENTS() вернет либо одноэлементный массив, содержащий объектную ссылку на источник события или массив, который представляет каждую существующую привязку события как отдельную строку содержающую в пяти колонках информацию о привязке.

Для получения более подробной информации смотрите описание функции AEVENTS().

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