Main Content

addlistener

クラス: handle

イベント ソースにバインドされたイベント リスナーの作成

構文

el = addlistener(hSource,EventName,callback)
el = addlistener(hSource,PropertyName,EventName,callback)
addlistener(___)

説明

el = addlistener(hSource,EventName,callback) は、ソース オブジェクト hSource でトリガーされたときにイベント EventName のリスナーを作成します。

hSource が配列である場合、リスナーは配列 hSource 内のどのオブジェクトについても、指定されたイベントに応答します。callback はコールバック関数を参照する関数ハンドルです。

el = addlistener(hSource,PropertyName,EventName,callback) は、事前定義プロパティ イベントのうちいずれかのリスナーを作成します。事前定義されたプロパティ イベントは 4 種類あります。

addlistener(___) は、ハンドルなしでリスナー オブジェクトを作成します。この構文は、前述の任意の入力構文で使用できます。

イベント名イベントが発生する時点
PreSet

プロパティの set アクセス メソッドを呼び出す前の、プロパティ値が設定される直前

PostSet

プロパティ値が設定された直後

PreGet

プロパティの get アクセス メソッドを呼び出す前の、プロパティ値のクエリが処理される直前

PostGet

プロパティ値がクエリに返された直後

入力引数

すべて展開する

イベント ソースは、イベントのソースであるオブジェクト、あるいはソース オブジェクトの配列であり、ハンドル配列として指定します。

ソース オブジェクト上でトリガーされるイベントの名前。大文字と小文字を区別する、引用符付きのテキストとして指定します。プロパティ イベントの場合、イベント名は 4 つの事前定義プロパティ イベントのいずれかです。

データ型: char | string

リスナーをトリガーするプロパティ イベントをもつプロパティの名前。次の値のいずれかとして指定します。

  • 文字ベクトルまたは文字ベクトルの cell 配列 (個々の文字ベクトルは hSource のオブジェクトに定義されたプロパティの名前)

  • string または string 配列 (個々の string は hSource のオブジェクトに定義されたプロパティの名前)

  • hSource 内のオブジェクトに定義されたプロパティに対応する、スカラーの matlab.metadata.Property オブジェクト、または matlab.metadata.Property オブジェクトの配列

hSource がスカラーの場合にのみ、動的プロパティのプロパティ イベントにリスナーを付加できます。hSource が非スカラーである場合、プロパティは hSource クラスに属さなければならず、(クラス定義にない) 動的プロパティを含めることはできません。

プロパティ イベントのリッスンを可能にするには、ソース プロパティを定義するクラスで GetObservable および SetObservable のプロパティ属性が設定されなければなりません。

関数ハンドルとして指定されたリスナー コールバック

データ型: function_handle

出力引数

すべて展開する

addlistener が作成するリスナー オブジェクト。listener オブジェクトまたは event.proplistener オブジェクトのハンドルとして指定します。

すべて展開する

グラフィックス figure ウィンドウの Color プロパティに関するプロパティ リスナーを作成します。

fig = figure;
propListener = addlistener(fig,'Color','PostSet',@(src,evnt)disp('Color changed'));

Color プロパティ値を yellow に設定します。プロパティを設定すると、Figure に関する PostSet プロパティ イベントがトリガーされます。イベント ソース オブジェクトは、ハンドル fig によって参照される特定の Figure です。

set(fig,'Color','yellow')

ヒント

  • リスナーのハンドルを含む変数 (el など) の再定義やクリアでは、リスナーは削除されません。イベント オブジェクト (hSource) にはまだ、event.listener オブジェクトへの参照があります。addlistener は、リスナーのライフサイクルをイベントのソースであるオブジェクトに関連付けます。

  • リスナーはイベント ソースのライフサイクルにバインドされますが、次の場合はイベント ソースの破棄後も残ります。

    • リスナーへの 1 つ以上の参照が他の変数内にある (作成時に指定した場合はリスナーのハンドルを含む)。

    • リスナーが他のイベント ソースに関連付けられている。

  • リスナーを削除するには、addlistener により返されるリスナー オブジェクトを削除します。以下に例を示します。

    delete(el)

    これは、ハンドル クラスの delete メソッドを呼び出して、ワークスペースからオブジェクトを削除し、リスナーを削除します。

  • イベント オブジェクトに関連付けられていないリスナーを定義するには、event.listener コンストラクターを使用して、直接リスナーを作成します。

代替方法

リスナー オブジェクトのライフサイクルをソース オブジェクトのライフサイクルから独立させる必要がある場合は、listener を使用してリスナーを作成します。

拡張機能

スレッドベースの環境
MATLAB® の backgroundPool を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool を使用してコードを高速化します。

バージョン履歴

R2008a で導入