文档

事件和监听器语法

组件实现

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

  • 在句柄类中指定事件的名称事件名称

  • 当动作发生时触发事件的函数或方法触发事件

  • 监听器对象来执行回调函数以响应被触发的事件听事件

  • 事件传递给回调函数的默认或自定义事件数据定义相关的数据

事件名称

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

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

触发事件

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

classdefToggleButton <处理属性状态= 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 =侦听器(obj,EventName@callbackFunction

例如,这段代码使用ToggleState前面讨论的事件:

lh =侦听器(obj,“ToggleState”@RespondToToggle.handleEvnt)

回调函数

监听器回调函数必须接受至少两个参数,MATLAB会自动将其传递给回调函数。以下是必要的参数:

  • 事件的来源,也就是说,obj在号召中addlistenerevent.listener

  • 一个事件。EventData对象的子类事件。EventData,例如ToggleEventData描述的对象,定义相关的数据

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

函数callbackFunction(evtdata src)……结束

有关回调语法的更多信息,请参见侦听器回调的语法

定义监听器

RespondToToggle类定义侦听的对象ToggleState事件中定义的ToggleButton类。

classdefRespondToToggle <处理方法函数addlistener = RespondToToggle(toggle_button_obj)“ToggledState”, @RespondToToggle.handleEvnt);结束结束方法(静态)函数handleEvnt (src, ~)如果src。国家disp (“ToggledState是真的”其他的disp (“ToggledState是假的”结束结束结束结束

RespondToToggle在其构造函数中添加侦听器。在本例中,类定义了回调函数(handleEvnt)作为一个静态方法,接受两个必需参数:

  • src-触发事件的对象的句柄(即aToggleButton对象)

  • evtdata——一个事件。EventData对象

例如,这段代码创建了两个类的对象:

结核病= ToggleButton;rtt = RespondToToggle(结核病);

每当你打电话给OnStateChange的方法ToggleButton对象,通知触发事件。在本例中,回调函数显示状态属性:

tb.OnStateChange(真正的)
ToggledState是真的
tb.OnStateChange(假)
ToggledState是假的

删除侦听器

通过调用删除对其处理。例如,如果类RespondToToggle将监听器句柄保存为属性后,可以删除监听器。

classdefRespondToToggle <处理属性ListenerHandle监听器句柄的属性结束方法函数hl = addlistener(toggle_button_obj),“ToggledState”, @RespondToToggle.handleEvnt);obj。ListenerHandle =霍奇金淋巴瘤;%保存监听器句柄结束结束方法(静态)函数handleEvnt (src, ~)如果src。国家disp (“ToggledState是真的”其他的disp (“ToggledState是假的”结束结束结束结束

的实例中可以删除侦听器RespondToToggle类。例如:

结核病= ToggleButton;rtt = RespondToToggle(结核病);

的对象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);

相关的话题

这个话题有用吗?