事件和侦听程序概述
为什么使用事件和侦听程序
事件是对象响应发生的事情而广播的通知,例如属性值更改或用户与应用程序的交互。侦听程序在通知关注的事件发生时执行函数。使用事件来通告对对象的更改。侦听程序通过执行回调函数来响应。
有关详细信息,请参阅事件和侦听程序概念。
事件和侦听程序基础知识
在使用事件和侦听程序时:
只有
handle
类可以定义事件和侦听程序。在类定义的
events
代码块中定义事件名称(事件和侦听程序语法)。使用事件属性指定对事件的访问权限(Event Attributes)。
调用句柄的
notify
方法触发事件。事件通知将指定事件广播给为此事件注册的所有侦听程序。使用句柄的
addlistener
方法将侦听程序耦合到事件源对象。MATLAB® 会在销毁事件的源时同时销毁侦听程序。使用句柄的
listener
方法可创建与事件源对象的生命周期不耦合的侦听程序。如果您在能够独立添加、删除或修改的不同组件中定义事件源和侦听程序,这种方式非常有用。您的应用程序代码控制侦听程序对象的生命周期。侦听程序回调函数必须定义至少两个输入参数 - 事件源对象句柄和事件数据(有关详细信息,请参阅Listener Callback Syntax)。
通过子类化
event.EventData
类修改传递给每个侦听程序回调的数据。
预定义的事件
MATLAB 定义事件用于侦听属性集和查询。有关详细信息,请参阅侦听对属性值的更改。
所有句柄对象都定义名为 ObjectBeingDestroyed
的事件。MATLAB 在调用类析构函数之前触发此事件。
事件语法
在 events
代码块中定义事件名称:
classdef ClassName < handle events EventName end end
例如,MyClass
定义名为 StateChange
的事件:
classdef MyClass < handle events StateChange end end
classdef ClassName < handle events EventName end methods function anyMethod(obj) notify(obj,'EventName'); end end end
任何函数或方法都可以为定义事件的类的特定实例触发事件。例如,triggerEvent
方法调用 notify
来触发 StateChange
事件:
classdef MyClass < handle events StateChange end methods function triggerEvent(obj) notify(obj,'StateChange') end end end
用 triggerEvent
方法触发 StateChange
事件:
obj = MyClass; obj.triggerEvent
有关详细信息,请参阅事件和侦听程序语法。
创建侦听程序
使用 handle
类 addlistener
或 listener
方法定义侦听程序。使用以下语法之一传递侦听程序回调函数的函数句柄:
addlistener(SourceOfEvent,'
- 针对普通函数。EventName
',@functionName
)addlistener(SourceOfEvent,'
- 针对EventName
',@Obj.methodName
)
的方法。Obj
addlistener(SourceOfEvent,'
- 针对类EventName
',@ClassName.methodName
)
的静态方法。ClassName
ListenerObject = addlistener(SourceOfEvent,'EventName',@listenerCallback);
addlistener
返回侦听程序对象。输入参数为:
- 定义事件的类的对象。事件在此对象上触发。SourceOfEvent
-EventName
events
类代码块中定义的事件名称。@
- 引用响应事件而执行的函数的函数句柄。listenerCallback
例如,为 StateChange
事件创建侦听程序对象:
function lh = createListener(src) lh = addlistener(src,'StateChange',@handleStateChange) end
为侦听程序定义回调函数。回调函数必须接受事件源对象和事件数据对象作为前两个参数:使用事件源参数访问触发事件的对象。使用事件数据对象查找有关事件的信息。
function handleStateChange(src,eventData) % src - handle to object that triggered the event % eventData - event.EventData object containing % information about the event. ... end
有关详细信息,请参阅Listener Callback Syntax。