如何检测文本编辑对象的焦点丢失?

时间:2012-03-22 20:43:55

标签: matlab user-interface focus

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

换句话说,最终用户能够在文本编辑中编写表达式,然后按Tab键移动到下一个文本编辑,同时看到红色背景,这将非常方便在输入有问题的情况下进行第一次文本编辑。

我想到了几种检查用户输入的方法,但它们不如上面那么方便。我怎么能实现这样的东西?

1 个答案:

答案 0 :(得分:7)

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

请注意,the documentation表示在这些其他条件下也会调用uicontrol的回调:

  • 单击其他组件,菜单栏或GUI背景。

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

  • 对于多行可编辑文本框,按 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