事件和监听器语法
要实现的组件
事件和监听器的实现涉及到以下组件:
事件名称
类中声明事件名称来定义事件事件
块。例如,该类创建一个名为ToggledState
:
classdefToggleButton < handle属性状态= false结束事件ToggledState结束结束
触发事件
的OnStateChange
方法调用通知
要触发ToggledState
事件。将事件源对象的句柄和事件名称传递给通知
.
classdefToggleButton < handle属性状态= false结束事件ToggledState结束方法函数OnStateChange (obj newState)如果newState ~= obj。国家obj。状态= newState; notify(obj,“ToggledState”);结束结束结束结束
倾听事件
在呼叫通知
触发事件,MATLAB®将消息广播给为该事件和源对象定义的所有侦听器。有两种方法可以创建监听器:使用句柄类handle.addlistener
或handle.listener
方法。
对持久监听器使用addlistener
如果希望侦听器在正常变量范围之外持久存在,请使用addlistener
来创造它。事件源对象保存对侦听器对象的引用。当事件源对象被销毁时,MATLAB将销毁侦听器。
类的侦听器ToggleState
事件:
Lh = addlistener(obj,“ToggleState”, @RespondToToggle.handleEvnt);
addlistener
有这些论点:
obj
—事件产生的对象ToggleState
—传递的事件名称字符
向量@RespondToToggle.handleEvnt
-回调函数的函数句柄(参见下面的定义)定义监听器).
使用处理。解耦侦听器和源
使用handle.listener
当您希望管理侦听器的生命周期并且不希望事件源和侦听器对象之间发生耦合时,可以使用该方法创建侦听器。MATLAB不会破坏使用创建的侦听器handle.listener
当事件源被销毁时。但是,在使用创建侦听器时,代码必须将侦听器对象句柄保持在作用域中handle.listener
.
的handle.listener
方法需要相同的参数handle.addlistener
:事件命名对象、事件名称和回调的函数句柄。handle.listener
返回监听器对象的句柄。
Lh = listener(obj,'EventName
',@callbackFunction)
例如,此代码使用ToggleState
前面讨论过的事件:
Lh = listener(obj,“ToggleState”@RespondToToggle.handleEvnt)
回调函数
监听器回调函数必须接受至少两个参数,MATLAB自动将其传递给回调函数。以下是必需的参数:
事件的源头,也就是说,
obj
在对addlistener
或event.listener
.一个
事件。EventData
对象的子类事件。EventData
,例如ToggleEventData
描述的对象,定义事件特定的数据.
定义回调函数以接受源对象和事件数据参数。
函数callbackFunction(evtdata src)……结束
有关回调语法的更多信息,请参见监听器回调语法.
定义监听器
的RespondToToggle
类定义侦听ToggleState
事件中定义的ToggleButton
类。
classdefRespondToToggle < handle方法函数obj = RespondToToggle(toggle_button_obj) addlistener(toggle_button_obj,“ToggledState”, @RespondToToggle.handleEvnt);结束结束方法(静态)函数handleEvnt (src, ~)如果src。国家disp (ToggledState为true)其他的disp (ToggledState为false)结束结束结束结束
类RespondToToggle
在其构造函数中添加侦听器。在本例中,该类定义回调函数(handleEvnt
)作为一个静态方法,接受两个必需的参数:
src
—事件触发对象的句柄(即aToggleButton
对象)evtdata
——一个事件。EventData
对象
例如,这段代码创建了两个类的对象:
tb = ToggleButton;rtt = RespondToToggle(tb);
每当你呼叫OnStateChange
方法ToggleButton
对象,通知
触发事件。的值状态
属性:
tb.OnStateChange(真正的)
ToggledState为真
tb.OnStateChange(假)
ToggledState为false
删除侦听器
通过调用删除侦听器对象删除
在它的把手上。例如,如果类RespondToToggle
将监听器句柄保存为属性,可以删除监听器。
classdefRespondToToggle < handle属性ListenerHandle监听器句柄的%属性结束方法函数obj = RespondToToggle(toggle_button_obj) hl = addlistener(toggle_button_obj,)“ToggledState”, @RespondToToggle.handleEvnt);obj。ListenerHandle = hl;保存监听器句柄结束结束方法(静态)函数handleEvnt (src, ~)如果src。国家disp (ToggledState为true)其他的disp (ToggledState为false)结束结束结束结束
类的实例中删除侦听器RespondToToggle
类。例如:
tb = ToggleButton;rtt = RespondToToggle(tb);
的对象rtt
是在听ToggleState
由对象触发的事件结核病
.要删除监听器,请调用删除
在包含侦听器句柄的属性上。
删除(rtt.ListenerHandle)
要暂时停用侦听器,请参见暂时停用监听器.
定义事件特定的数据
假设您希望将切换按钮的状态作为事件的结果传递给侦听器回调。类的子类化,可以向默认事件数据添加更多数据事件。EventData
类,并添加包含此信息的属性。然后可以将该对象传递给handle.notify
方法。
请注意
的子类保存和加载对象事件。EventData
,例如ToggleEventData
,启用ConstructOnLoad
子类的Class属性。
classdef(ConstructOnLoad) ToggleEventData <事件。EventData属性NewState结束方法函数data = ToggleEventData(newState)数据。NewState = NewState;结束结束结束
呼唤通知
可以使用ToggleEventData
构造函数来创建必要的实参。
evtdata = ToggleEventData(newState);通知(obj,“ToggledState”, evtdata);