Main Content

カスタム イベント データの定義

クラス イベント データの要件

イベントが発生したときに特定の情報にアクセスするリスナー コールバック関数を作成するとします。この例では、カスタムのイベント データを作成することでその方法を説明します。

イベントは、イベント データ引数を、指定した関数に渡すことによって、リスナーのコールバック関数に情報を提供します。既定では、MATLAB®event.EventData オブジェクトをリスナー コールバックに渡します。このオブジェクトは、2 つのプロパティをもちます。

  • EventName — このオブジェクトによりトリガーされるイベント名。

  • Source — イベントをトリガーするオブジェクトのハンドル。

event.EventData クラスをサブクラス化することによって、リスナー コールバックに追加の情報を提供します。

  • 追加データを含めるよう、サブクラスでプロパティを定義する。

  • 追加データを引数として受け取るコンストラクターを定義する。

  • ConstructOnLoad クラス属性を設定する。

  • サブクラス コンストラクターを notify メソッドへの引数として使用し、イベントをトリガーする。

イベントの定義とトリガー

SimpleEventClass は、ある範囲を超える値にプロパティが設定されるとそこからイベントをトリガーする、プロパティの set メソッド (プロパティの get メソッドおよび set メソッドを参照) を定義します。property set メソッドは以下の操作を実行します。

  • オリジナルのプロパティ値を保存する

  • 指定した値にプロパティを設定する

  • 指定した値が 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 オブジェクトに含まれます。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

関連するトピック