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) 为某个预定义的属性事件创建侦听程序。有四个预定义的属性事件:

addlistener(___) 创建一个没有句柄的侦听程序对象。您可以将此语法用于任何以前的输入语法。

事件名称事件发生
PreSet

在设置属性值之前、调用它的 set 访问方法之前立即触发

PostSet

在属性值设置之后立即触发

PreGet

在提供属性值查询服务之前、调用它的访问方法之前立即触发

PostGet

在将属性值返回到查询后立即触发

输入参数

全部展开

事件源是作为事件来源的对象,或源对象数组,指定为句柄数组。

源对象上触发的事件的名称,指定为区分大小写的引用文本。对于属性事件,事件名称为四个预定义的属性事件之一。

数据类型: char | string

其属性事件触发您的侦听程序的属性名称,指定为以下值之一:

  • 字符向量或字符向量元胞数组,其中每个字符向量是您为 hSource 中的对象定义的属性名称

  • 字符串或字符串数组,其中每个字符串都是为 hSource 中的对象定义的属性的名称

  • 标量 matlab.metadata.Property 对象或由 matlab.metadata.Property 对象组成的数组,这些对象对应于为 hSource 中的对象定义的属性

仅当 hSource 为标量时,才能将侦听程序与动态属性的属性事件关联。如果 hSource 不是标量,则这些属性必须属于 hSource 的类,且不能包含动态属性(不属于类定义)。

定义源属性的类必须设置 GetObservableSetObservable 属性特性以让您能够侦听属性事件。

侦听程序回调,指定为函数句柄

数据类型: function_handle

输出参量

全部展开

addlistener 创建的侦听程序对象,指定为 listenerevent.proplistener 对象的句柄。

示例

全部展开

为图形 figure 窗口的 Color 属性创建属性侦听程序。

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

Color 属性的值设置为 yellow。设置该属性将触发图窗的 PostSet 属性事件。事件源对象是句柄 fig 引用的特定图窗。

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

提示

  • 重新定义或清除包含侦听程序句柄(例如 el)的变量不会删除该侦听程序。事件对象 (hSource) 仍引用 event.listener 对象。addlistener 将侦听程序的生命周期与作为事件来源的对象相关联。

  • 尽管侦听程序与事件源的生命周期绑定在一起,但在以下情况下,侦听程序在事件源销毁后继续存在:

    • 对侦听程序的一个或多个引用位于其他变量中,包括侦听程序的句柄(如果在创建时指定了句柄)。

    • 侦听程序与其他事件源绑定在一起。

  • 要删除侦听程序,请删除 addlistener 返回的侦听程序对象。例如,

    delete(el)

    调用句柄类 delete 方法以便从工作区中删除对象并删除侦听程序。

  • 要定义未与事件对象相关联的侦听程序,请直接使用 event.listener 构造函数创建侦听程序。

备选方法

如果您希望侦听程序对象的生命周期独立于源对象的生命周期,请使用 listener 创建侦听程序。

扩展功能

基于线程的环境
使用 MATLAB® backgroundPool 在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool 加快代码运行速度。

版本历史记录

在 R2008a 中推出