2012-03-22 52 views
5

这是我第一次尝试在MATLAB中创建GUI。到目前为止,我还没能找到一种方法来检测焦点何时从文本编辑转移到某个其他对象。我需要这样的功能,所以如果输入以不正确的方式形成,我可以“现场”测试用户输入,并将文本编辑的背景颜色更改为红色。如何从文本编辑对象中检测焦点丢失?

换句话说,最终用户可以非常方便地在文本编辑中编写他的表达式,然后按Tab键移动到下一个文本编辑,同时看到红色背景在第一个文本中编辑输入时出现一些问题。

我想到了几种替代方案来检查用户输入,但它们不如上述方便。我该如何实现这样的东西?

回答

7

当您按Tab键将焦点从可编辑文本框移动到另一个uicontrol对象时,将调用可编辑文本框的callback function。因此,您只需将代码用于检查文本并提醒用户在可编辑文本uicontrol的回调函数中存在问题。

注意the documentation状态,对于一个uicontrol回调还将这些其它条件下被调用:

  • 点击另一个组件,菜单栏,或GUI的背景。

  • 对于单行可编辑文本框,按输入

  • 对于多可编辑的文本框,按下Ctrl键+输入

例如,这里有一个非常简单的回调实现,将文本背景色设置为默认的灰色值,如果字符串为'yes''no',或红色,如果字符串为别的:

function callback_fcn(hSource, eventData) 
    if ismember(get(hSource, 'String'), {'yes', 'no'}) 
    set(hSource, 'BackgroundColor', [0.941176 0.941176 0.941176]); 
    else 
    set(hSource, 'BackgroundColor', 'r'); 
    end 
end 
+0

大声笑,所以吓到简单...到目前为止,我认为当按下命令按钮时,调用回调函数。非常感谢你! – niels 2012-03-22 21:01:35