问题
如何获取 double 类型句柄的事件和属性列表,如figure
, axes
?
问题
Matlab 文档告诉您使用WindowButtonDownFcn
,WindowButtonMotionFcn
等来收听界面上发生的任何事情。问题是这个属性非常有限,因为以下事实:
将变量保持在范围内
当 MATLAB 计算函数句柄时,与创建函数句柄时相同的变量在范围内。(相比之下,指定为字符串的回调在基本工作区中进行评估。)这简化了在 GUI 中管理全局数据(例如对象句柄)的过程。
是的,这是完美的,如果您不必从 ButtonDownFcn 重新定义、添加或删除回调,因为如果这样做,您将失去其他函数句柄变量范围,因为您在新范围内声明它们may肯定不会包含您如此需要的变量。
因此,一种方法是监听事件本身,而不是在事件激活时调用的属性,这样做,您不必费心重新声明 ButtonDownFcn 以及如何将变量保持在范围内,因为其他解决方案实施起来很慢!. 如果我可以像使用 matlab 监听工具那样直接监听事件handle.listener
,addlistener
我就不必为此烦恼了。
一种已知的好方法
似乎最好的解决方案之一是这个 FEX,它赋予了弱 matlabWindowButtonDownFcn
和WindowButtonDownFcn
matlab 具有的任何属性“监听器”功能,这样您就可以在图形界面上拥有任意数量的函数来监听变化,而不必关心您的其他函数句柄将丢失其范围变量。
有了这个,我不需要获取 matlab 事件,因为它为我包装了所有内容。但是,matlab 引导您的用户使用损坏的功能而不是记录更好的方法并引导人们将所有内容包装起来,以便他们可以按应有的方式使用东西,这仍然让我感到有趣。
可能有用的信息。
我知道meta.class
这会给我一个类所具有的所有属性、事件等。对于我有一个继承自 a 的类handle
:
>> EventMeta = ?Event
EventMeta =
class with properties:
Name: 'Event'
Description: ''
DetailedDescription: ''
Hidden: 0
Sealed: 0
Abstract: 0
ConstructOnLoad: 0
HandleCompatible: 1
InferiorClasses: {0x1 cell}
ContainingPackage: []
PropertyList: [64x1 meta.property]
MethodList: [29x1 meta.method]
EventList: [2x1 meta.event]
EnumerationMemberList: [0x1 meta.EnumeratedValue]
SuperclassList: [1x1 meta.class]
使用该元数据,我可以从我的Event
班级中获取 EventList,它们是:
>> EventMeta.EventList.Name
ans =
attemptToClick
ans =
ObjectBeingDestroyed
好吧,在这种情况下,这并不是一件好事,因为我已经实现了它并且我知道它所具有的事件,因为我有源代码。问题是,如果我可以获得 a 的元类(如果可能的话),如果它们在 matlab 上可用figure
,我就可以访问它的实现。Events