文件

事件和监听器概念

事件模型

活动表示对象内发生的变化或行动。例如,

  • 类数据的修改

  • 方法的执行

  • 查询或设置属性值

  • 销毁一个对象

基本上,您可以通过编程检测到任何活动可以产生一个事件和其他对象进行通信的信息。

马铃薯®类定义了一个流程,该流程将事件的发生与响应事件的其他对象进行通信。事件模型是这样工作的:

下图说明的事件模型。

限制

还有的使用事件有一定的局限性:

  • 事件源不能保证触发事件时监听器存在。

  • 一位听众无法阻止其他侦听器通知所发生的事件。

  • 其中听众的执行顺序没有定义。

  • 监听器不应该修改传递给监听器回调的事件数据对象,因为其他监听器也传递了相同的句柄对象。

违约事件数据

事件通过向回调函数传递事件数据参数为监听器回调提供信息。默认情况下,MATLAB通过一个event.EventData对象指向监听器回调。这个对象有两个属性:

  • EventName- 在类中定义的事件名称事件堵塞

  • —作为事件来源的对象

MATLAB传递源对象在所需的事件数据参数中的监听器的回调。使用源对象从您的听者回调函数中访问任何对象的公共属性。

自定义事件数据

您可以创建的一个子类event.EventData类在侦听器回调函数提供更多的信息。子类将定义属性以包含附加数据,并提供构建衍生事件的数据对象的方法,因此它可以被传递到通知方法。

定义事件的具体数据提供显示如何自定义此数据的示例。

活动只有在句柄类

您只能在手柄类定义的事件。之所以存在这种限制是因为值类是只在一个单一的MATLAB工作区中看到这样没有回调或监听器可以访问触发事件的对象。回调可以访问该对象的副本。但是,访问一个副本,因为回调不能访问触发事件或影响该对象中的任何改变对象的当前状态是没有用的。

手柄和值类的比较提供手柄类的一般信息。

事件和监听器语法显示了定义一个句柄类和事件的语法。

财产设置和查询活动

有相关性四个预定义的事件:

  • 预调-在属性值设置之前触发,在调用它的set访问方法之前触发

  • 后集- 触发属性值设置刚过

  • PreGet-在服务属性值查询之前触发,在调用它的get访问方法之前触发

  • PostGet- 只是触发属性值返回查询后

这些事件被预定义的,并且不需要在类上市活动堵塞。

当属性事件发生时,回调函数被传递一个event.PropertyEvent目的。这个对象有三个属性:

  • EventName- 所述事件的名称中描述该数据对象

  • - 源对象,它的类定义数据对象所描述的事件

  • AffectedObject- 对象其属性是此事件的源(即,AffectedObject包含其属性已或者访问或修改)对象。

您可以通过继承定义自己的属性更改事件数据event.EventData班级。这event.PropertyEvent类是一个密封的子类event.EventData

倾听更改属性值该进程的创建属性侦听器的说明。

PostSet事件监听器的一个例子。

属性访问方法有关控制对属性值的访问的方法的信息。

听众

监听器封装对事件的响应。监听器对象属于event.listener类,它是一个句柄类,定义了以下属性:

  • —生成事件的对象的句柄或句柄数组

  • EventName- 事件的名称

  • 回调—当已启用的监听器收到事件通知时执行

  • 启用- 回调函数执行,只有当启用真正的.看启用和禁用监听器的一个例子。

  • 递归- 允许监听器来触发导致回调的执行相同的事件。

    递归错误的默认情况下。如果回调触发了它被定义为回调的事件,侦听器就不能递归执行。因此,设置递归错误的如果回调必须触发它自己的事件。设置递归财产真正的可能造成无限递归达到递归极限并触发错误的情况。

控制监听器生命周期提供更具体的信息。

这个话题有用吗?