動的プロパティのイベント
動的プロパティと通常のプロパティ イベント
動的プロパティは、プロパティの set イベントと get イベントをサポートするので、これらのプロパティに対してリスナーを定義できます。リスナーは、それらが定義された特定の動的プロパティにバインドされています。
動的プロパティを削除し、同じ名前の別の動的プロパティを作成すると、リスナーは新しいプロパティによって生成されたイベントに応答しません。削除された動的プロパティに対して定義されたリスナーはエラーの原因にはなりませんが、そのリスナーのコールバックが実行されることはありません。
プロパティの設定とクエリのイベントでは、これらのイベントに対してリスナーを定義する方法の詳細を説明します。
動的プロパティのイベント
動的プロパティの追加および削除に応答するには、動的プロパティを含むオブジェクトにリスナーを付加します。dynamicprops
クラスはこのためのイベントを定義します。
PropertyAdded
—dynamicprops
クラスから派生するオブジェクトに動的プロパティを追加するとトリガーされます。PropertyRemoved
— オブジェクト、または動的プロパティに関連付けられているmatlab.metadata.DynamicProperty
オブジェクトを削除したときにトリガーされます。ObjectBeingDestroyed
— オブジェクトが破棄されたときにトリガーされます。このイベントはhandle
クラスから継承されます。
これらのイベントには、パブリックの listen アクセス (ListenAccess
属性) とプライベートの notify アクセス (NotifyAccess
属性) があります。
PropertyAdded
イベントと PropertyRemoved
イベントは、event.DynamicPropertyEvent
オブジェクトをリスナー コールバックに渡します。イベント データ オブジェクトには、以下の 3 つのプロパティがあります。
PropertyName
— 追加または削除される動的プロパティの名前Source
— イベントのソースであるオブジェクトのハンドルEventName
— イベントの名前 (PropertyAdded
、PropertyRemoved
またはObjectBeingDestroyed
)
特定のプロパティ名のリスニング
特定の条件の下で動的プロパティを作成するアプリケーションがあるとします。以下を行う場合を考えてみます。
SpecialProp
という名前のプロパティが追加されたときに、非表示のプロパティの値をtrue
に設定する。SpecialProp
が削除されたときに、非表示のプロパティの値をfalse
に設定する。
event.DynamicPropertyEvent
イベント データを使用して、プロパティの名前と、それを追加するか削除するかを決定します。
DynamTest
クラスは dynamicprops
から派生します。このクラスは非表示のプロパティ HiddenProp
を定義します。
classdef DynamTest < dynamicprops properties (Hidden) HiddenProp end end
イベント データの EventName
プロパティを使用するコールバック関数を定義して、プロパティを追加するか削除するかを決定します。イベント データの PropertyName
プロパティからプロパティの名前を取得します。動的プロパティに SpecialProp
という名前が付いている場合、非表示のプロパティの値を変更します。
function DyPropEvtCb(src,evt) switch evt.EventName case 'PropertyAdded' switch evt.PropertyName case 'SpecialProp' % Take action based on the addition of this property %... %... src.HiddenProp = true; disp('SpecialProp added') otherwise % Other property added % ... disp([evt.PropertyName,' added']) end case 'PropertyRemoved' switch evt.PropertyName case 'SpecialProp' % Take action based on the removal of this property %... %... src.HiddenProp = false; disp('SpecialProp removed') otherwise % Other property removed % ... disp([evt.PropertyName,' removed']) end end end
DynamTest
クラスのオブジェクトを作成します。
dt = DynamTest;
PropertyAdded
イベントと PropertyRemoved
イベントの両方にリスナーを追加します。
lad = addlistener(dt,'PropertyAdded',@DyPropEvtCb); lrm = addlistener(dt,'PropertyRemoved',@DyPropEvtCb);
PropertyAdded
イベント コールバックの実行
動的プロパティを追加すると、PropertyAdded
イベントがトリガーされます。次のステートメントは、オブジェクトに動的プロパティを追加し、返される matlab.metadata.DynamicProperty
オブジェクトを保存します。
ad = addprop(dt,'SpecialProp');
動的プロパティを追加すると、コールバック関数 DyPropEvtCb
がリスナーによって実行されます。コールバック関数は、HiddenProp
プロパティに値 true
を代入します。
dt.HiddenProp
ans = 1
PropertyRemoved
イベント コールバックの実行
addprop
メソッドによって返された matlab.metadata.DynamicProperty
オブジェクトで delete
を呼び出すことにより、動的プロパティを削除します。matlab.metadata.DynamicProperty
オブジェクトを削除すると、PropertyRemoved
イベントがトリガーされます。
動的プロパティ SpecialProp
を追加したときに返される matlab.metadata.DynamicProperty
オブジェクトを削除します。
delete(ad)
コールバックが以下を実行します。
SpecialProp removed
HiddenProp
の値が false
になっています。
dt.HiddenProp
ans = 0
matlab.metadata.DynamicProperty
オブジェクトを検出する方法
findprop
を使用して、動的プロパティの matlab.metadata.DynamicProperty
オブジェクトを取得できます。addprop
によって返されたオブジェクトがない場合は、findprop
を使用します。
ad = findprop(dt,'SpecialProp');