【问题标题】:How do I detect focus loss from a text edit object?如何检测文本编辑对象的焦点丢失?
【发布时间】:2012-03-23 22:17:52
【问题描述】:

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

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

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

【问题讨论】:

    标签: matlab user-interface focus


    【解决方案1】:

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

    请注意,the documentation 声明 uicontrol 的回调也将在这些其他条件下被调用:

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

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

    • 对于多行可编辑文本框,按 Ctrl+Enter

    例如,这里有一个非常简单的回调实现,如果字符串是'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
    

    【讨论】:

    • 大声笑,太简单了......到目前为止,我认为回调函数是在按下命令按钮时调用的。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多