Задайте пользовательские данные о событиях

Требования к данным о событиях класса

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

События предоставляют информацию функциям обратного вызова прослушивателя путем передачи аргумента данных о событиях в указанную функцию. По умолчанию MATLAB® передает event.EventData объект для коллбэка прослушивателя. Этот объект имеет два свойства:

  • EventName - имя события, инициируемого этим объектом.

  • Source - указатель на объект, вызывающий событие.

Предоставьте дополнительную информацию для коллбэка прослушивателя путем подклассификации event.EventData класс.

  • Задайте свойства в подклассе, чтобы содержать дополнительные данные.

  • Задайте конструктор, который принимает дополнительные данные как аргументы.

  • Установите ConstructOnLoad атрибут класса.

  • Используйте конструктор подкласса в качестве аргумента для notify метод для запуска события.

Определите и инициируйте событие

The SimpleEventClass определяет метод набора свойств (см. «Методы набора свойств»), из которого он инициирует событие, если для свойства задано значение, превышающее определенный предел. Метод набора свойств выполняет следующие операции:

  • Сохраняет исходное значение свойства

  • Устанавливает свойство на заданное значение

  • Если заданное значение больше 10, метод set запускает Overflow событие

  • Передает исходное значение свойства и другие данные о событиях в SpecialEventDataClass объект для notify способ.

classdef SimpleEventClass < handle
   properties
      Prop1 = 0
   end
   events
      Overflow
   end
   methods
      function set.Prop1(obj,value)
         orgvalue = obj.Prop1;
         obj.Prop1 = value;
         if (obj.Prop1 > 10)
            % Trigger the event using custom event data
            notify(obj,'Overflow',SpecialEventDataClass(orgvalue));
         end
      end
   end
end

Определите данные о событиях

Данные о событиях всегда содержатся в event.EventData объект. The SpecialEventDataClass добавляет значение исходного свойства в данные о событиях путем подклассирования event.EventData:

classdef (ConstructOnLoad) SpecialEventDataClass < event.EventData
   properties
      OrgValue = 0
   end
   methods
      function eventData = SpecialEventDataClass(value)
         eventData.OrgValue = value;
      end
   end
end

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

Чтобы послушать Overflow событие, присоедините прослушиватель к образцу SimpleEventClass класс. Используйте addlistener метод для создания прослушивателя. Кроме того, необходимо задать функцию обратного вызова, чтобы прослушиватель выполнялся при запуске события.

Функция setupSEC создает экземпляры SimpleEventClass Класс и добавляет прослушивателя к объекту. В этом примере функция обратного вызова прослушивателя отображает информацию, которая содержится в eventData аргумент (который является SpecialEventDataClass объект).

function sec = setupSEC
   sec = SimpleEventClass;
   addlistener(sec,'Overflow',@overflowHandler)
   function overflowHandler(eventSrc,eventData)
      disp('The value of Prop1 is overflowing!')
      disp(['Its value was: ' num2str(eventData.OrgValue)])
      disp(['Its current value is: ' num2str(eventSrc.Prop1)])
   end
end

Создайте SimpleEventClass объект и добавить прослушиватель:

sec = setupSEC;
sec.Prop1 = 5;
sec.Prop1 = 15; % listener triggers callback
The value of Prop1 is overflowing!
Its value was: 5
Its current value is: 15

Похожие темы