MATLAB - 编辑框的回调函数执行

3
正如MATLAB文档中对于编辑框uicontrol的引用或者在这篇文章中所述,当点击其他组件、菜单栏或背景图形用户界面时,编辑框回调函数就会被执行。但是,在我尝试使用这个功能时,除非编辑框文本发生变化或按下了回车键,否则我迄今为止都没有看到回调函数的执行。我想要实现的是,即使没有输入任何内容,只要焦点从编辑框移开,就执行编辑框回调函数。请告诉我我错过了什么以及我该如何做到这一点?提前感谢您。

1
似乎当编辑文本失去焦点且其内容已被编辑时,回调才会被执行。至少这是我在这里得到的结果。 - Luis Mendo
是的,看起来是这样,但文档呢? - user3723486
这似乎支持我们的观察:http://www.mathworks.es/es/help/matlab/creating_guis/add-code-for-components-in-callbacks.html#f10-1001464 - Luis Mendo
好的,那是针对R2014a版本的,但在我2009年的离线文档中,正如我之前所述。 - user3723486
我正在2010b和2008a中进行测试,除非文本已更改,否则不会执行回调。 - Luis Mendo
在此链接的“指定Uicontrol样式”部分中,编辑框的信息似乎支持我的说法:http://www.mathworks.com/help/matlab/ref/uicontrol.html - user3723486
2个回答

2

底层的Java对象有一个回调函数叫做FocusLostCallback,它可以在对象失去焦点时执行你想要的操作,即使你没有进行任何更改。

你需要从MATLAB文件交换中心获取findjobj。然后,获取Java句柄并像往常一样设置回调函数(确保在尝试获取Java句柄时uicontrol可见):

jh = findjobj(myEditBox); % myEditBox is a uicontrol handle
set(jh, 'FocusLostCallback', @myCallback);

更完整的未记录回调列表可以在Yair Altman的未记录MATLAB博客中找到。


因此,有关编辑框的信息在http://mathworks.com/help/matlab/ref/uicontrol.html中并不明确正确。 - user3723486
根据语句:“要执行编辑文本控件的回调例程,请键入所需文本,然后执行以下操作之一:(a)单击另一个组件、菜单栏或 GUI 的背景;(b)对于单行可编辑文本框,请按 Enter 键。(c)对于多行可编辑文本框,请按 Ctl+Enter 键。”,当编辑框中没有更改时,似乎不正确。请注意,当您按下 Enter 键时,它仍会执行回调。这可能是需要向 MathWorks 提出警告的事项。 - Dang Khoa

1

这种方法在单行文本框上完美运作,但对多行文本框(uicontrol,样式编辑,最大值=2)没有任何影响。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接