Обзор событий и прослушиватели

Почему События использования и прослушиватели

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

Для получения дополнительной информации смотрите Событие и Концепции прослушивателя.

События и основы прослушивателей

При использовании событий и прослушивателей:

  • Только классы handle могут задать события и прослушиватели.

  • Событие Define называет в блоке events определения класса (События и Синтаксис Прослушивателей).

  • Используйте атрибуты события, чтобы задать доступ к событию (Атрибуты События).

  • Вызовите указатель метод handle.notify, чтобы инициировать событие. Уведомление о событии широковещательно передает именованное событие ко всем прослушивателям, указанным для этого события.

  • Используйте указатель метод handle.addlistener, чтобы связать прослушиватель объекта источника события. MATLAB® уничтожает прослушиватель, когда источник события уничтожается.

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

  • Функции обратного вызова прослушивателя должны задать по крайней мере два входных параметра — указатель на объект источника события и данные о событиях (См. Синтаксис Коллбэка Прослушивателя для получения дополнительной информации).

  • Измените данные, переданные каждому коллбэку прослушивателя путем разделения на подклассы класса event.EventData.

Предопределенные События

События MATLAB Defines для слушания наборов свойств и запросов. Для получения дополнительной информации смотрите, Прислушиваются к Изменениям в Значениях свойств.

Все объекты указателя задают событие под названием ObjectBeingDestroyed. MATLAB инициировал это событие прежде, чем вызвать деструктор класса.

События и синтаксис прослушивателей

Задайте имя события в блоке events кода:

classdef ClassName < handle
   ...
   events
      EventName
   end
   ...
end

Например, MyClass задает событие под названием StateChange:

classdef MyClass < handle
   events
      StateChange
   end
end

Инициируйте событие с помощью класса handle метод notify:

classdef ClassName < handle
   ...
   events
      EventName
   end
   ...
   methods
      function anyMethod(obj)
         ...
         notify(obj,'EventName');
      end
   end
end

Любая функция или метод могут инициировать событие для определенного экземпляра класса, задающего событие. Например, вызовы метода triggerEvent notify, чтобы инициировать событие StateChange:

classdef MyClass < handle
   events
      StateChange
   end
   methods
      function triggerEvent(obj)
         notify(obj,'StateChange')
      end
   end
end

Инициируйте событие StateChange с методом triggerEvent:

obj = MyClass;
obj.triggerEvent

Создание прослушивателя

Задайте прослушиватель с помощью класса handle метод handle.listener или handle.addlistener. Передайте указатель на функцию для функции обратного вызова прослушивателя с помощью одного из этих синтаксисов:

  • addlistener(SourceOfEvent,'EventName',@functionName) — для обычной функции.

  • addlistener(SourceOfEvent,'EventName',@Obj.methodName) — для метода Obj.

  • addlistener(SourceOfEvent,'EventName',@ClassName.methodName) — для статического метода класса ClassName.

ListenerObject = addlistener(SourceOfEvent,'EventName',@listenerCallback);

addlistener возвращает объект прослушивателя. Входные параметры:

  • SourceOfEvent — Объект класса, который задает событие. Событие инициировано на этом объекте.

  • EventName Имя события задало в классе блок events кода.

  • @listenerCallback — указатель на функцию, ссылающийся на функцию, которая выполняется в ответ на событие.

Например, создайте объект прослушивателя для события StateChange:

function lh = createListener(src)
   lh = addlistener(src,'StateChange',@handleStateChange)
end

Задайте функцию обратного вызова для прослушивателя. Функция обратного вызова должна принять как первые два аргумента объект источника события и объект данных о событиях:

function handleStateChange(src,eventData)
   ...
end

Похожие темы