文档

事件和监听器语法

要实现的组件

事件和监听器的实现涉及到以下组件:

事件名称

类中声明事件名称来定义事件事件块。例如,该类创建一个名为ToggledState

classdefToggleButton < handle属性状态= false结束事件ToggledState结束结束

触发事件

OnStateChange方法调用通知要触发ToggledState事件。将事件源对象的句柄和事件名称传递给通知

classdefToggleButton < handle属性状态= false结束事件ToggledState结束方法函数OnStateChange (obj newState)如果newState ~= obj。国家obj。状态= newState; notify(obj,“ToggledState”);结束结束结束结束

倾听事件

在呼叫通知触发事件,MATLAB®将消息广播给为该事件和源对象定义的所有侦听器。有两种方法可以创建监听器:使用句柄类handle.addlistenerhandle.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自动将其传递给回调函数。以下是必需的参数:

定义回调函数以接受源对象和事件数据参数。

函数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);

相关的话题