Вы можете использовать функцию AEVENTS( ) для получения числа существующих привязок событий.
AEVENTS( ArrayName [, 0 | 1 | oEventObject ] ) |
Параметры
- ArrayName
-
Указывает имя массива, который содержит результаты вызова функции AEVENTS( ).
- 0
-
Указывает, что AEVENTS( ) возвращает трехэлементный массив, содержащий объектную ссылке на текущий источник события, наименование сработавшего события и как было инициировано событие.
Колонка Описание Тип 1
Источник события
Объектная ссылка
2
Событие
Строка
3
Тип события или как было инициировано событие.
0 - системное
1 - в результате вызова RAISEEVENT()
2 - в результате вызова метода
Третий элемент массива указывает, как было инициировано событие. Если событие является свойством, то это значение может быть равно 1 или 2. Зачение равно 2 если свойству устанавливалось или присваивалось значение.
- 1
-
Указывает, что AEVENTS( ) возвращает четырехколоночный массив, содержащий информацию о событиях Windows Message (Win Msg).
Массив содержит одну строку на каждую привязку. Привязки создаются с помощью функции BINDEVENT().
В приведенной ниже таблице описывается содержание каждой колонки в массиве.
Колонка Описание Тип 1
hWnd
Целочисленное
2
Window Message
Целочисленное
3
Ссылка обработчика
Объектная ссылка
4
Делегат обработчика
Строка
- oEventObject
-
Указывает на объектную ссылку. Ели вы указали объектную ссылку, то AEVENTS() возвращает пятиколоночный массив, который содержит срабатовшие события и методы-делегаты для oEventObject. Каждая строка в ArrayName представляет привязку. В приведенной ниже таблице описывается информация, содержащаяся в каждой из пяти колонок.
Колонка Описание Тип 1
.T. если второй элемент является источником события
.F. если второй элемент является обработчиком события
Логическое
2
Источник события, если вы посылаете обработчик события в oEventObject; в противном случае, обработчик события, если вы посылаете источник события в oEventObject.
Объектная ссылка
3
Событие
Строка
4
Метод-делегат
Строка
5
флаги BINDEVENT()
Целочисленное
Когда вы посылаете oEventObject, число привязок, возвращаемое AEVENTS( ) должно быть равно число несвязанных событий, возвращаемый функцией UNBINDEVENTS( ), когда посылаем только параметр oEventObject.
Возвращаемое значение
Численный тип. AEVENTS( ) возвращает число строк в указанном массиве. Обычно, число представляет собой число привязок событий. Однако, если вы пошлете нуль (0), тогда AEVENTS( ) возвратит 3.
Примечания
Если AEVENTS() возвращает 0 и массив не существует, то Visual FoxPro не создает массив. Visual FoxPro изменяет или переписывает существующий массив только в том случае, если возвращается действительный результат. Массив остается неизменным при следующих условиях:
-
Не существует событий.
-
Вы указали значение 0 в качестве второго параметра, и AEVENTS( ) не появляется с событием или oEventObject не имеет привязок.
Пример
Приведенный ниже пример показывает, как использовать AEVENTS( ) для получения числа существующих привязок события. BINDEVENTS( ) удерживает Class Browser помещенный с правой стороны рабочего стола Visual FoxPro, независимо от того, как меняются размеры рабочего стола. Для получения более подробной информации, смотрите описание функции BINDEVENT().
UNBINDEVENTS( ) отсоединяет событие Resize систмной переменной _SCREEN от объекта oHandler
. AEVENTS( ) возвращает число привязок событий до BINDEVENT( ) и после UNBINDEVENTS( ) в массиве с именем myArray
:
![]() | |
---|---|
PUBLIC oHandler oHandler=NEWOBJECT("myhandler") DO (_browser) BINDEVENT(_SCREEN,"Resize",oHandler,"myresize") AEVENTS(myArray,oHandler) numRows=ALEN(myArray,1) numCols=ALEN(myArray,2) WAIT "Rows in array after binding: " + TRANSFORM(numRows) WINDOW AT 20,20 WAIT "Cols in array after binding: " + TRANSFORM(numCols) WINDOW AT 20,20 FOR count1 = 1 TO numRows FOR count2 = 1 TO numCols WAIT myArray[count1,count2] WINDOW AT 20,20 ENDFOR ENDFOR * Закомментируйте следующую строку кода для того, чтобы увидеть сохраняемые привязки события. UNBINDEVENTS(_SCREEN,"Resize",oHandler,"myresize") AEVENTS(myArray,oHandler) * Проверька создания и заполнения нового массива функцией AEVENTS(). IF VARTYPE(myArray) <> U * Приведенный ниже код не исполняется если событие не привязано, так как * AEVENT( ) не создает нового массива если возвращен 0. * Для исполнения приведенногон ниже кода смотрите содержание нового массива, * раскомментируйте предложение UNBINDEVENTS(). numRows=ALEN(myArray,1) numCols=ALEN(myArray,2) WAIT "Rows in array after unbinding: " + TRANSFORM(numRows) ; WINDOW AT 20,20 WAIT "Cols in array after unbinding: " + TRANSFORM(numCols) ; WINDOW AT 20,20 FOR count1 = 1 TO numRows FOR count2 = 1 TO numCols WAIT myArray[count1,count2] WINDOW AT 20,20 ENDFOR ENDFOR ENDIF DEFINE CLASS myhandler AS Session PROCEDURE myresize _obrowser.left = _SCREEN.Width - _obrowser.width RETURN ENDDEFINE |
Смотрите также
Задачи
Образец примера привязки, инициирования, развяки и извлечения событийСправочное руководство
Функция BINDEVENT( )Функция UNBINDEVENTS( )
Функция RAISEEVENT( )
SYS(2325) - WCLIENTWINDOW из Visual FoxPro WHANDLE
SYS(2326) - WHANDLE из hWnd окна
SYS(2327) - hWnd окна из Visual FoxPro WHANDLE