カスタム イベント データの定義
クラス イベント データの要件
イベントが発生したときに特定の情報にアクセスするリスナー コールバック関数を作成するとします。この例では、カスタムのイベント データを作成することでその方法を説明します。
イベントは、イベント データ引数を、指定した関数に渡すことによって、リスナーのコールバック関数に情報を提供します。既定では、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