与下拉选项相关的数值

时间:2017-07-15 21:32:08

标签: matlab validation user-interface drop-down-menu matlab-app-designer

所以我创建了一个应用程序来根据一系列变量计算出一个值(参见this gist中的完整代码)。变量是:

  • 性别
  • 年龄
  • 重量
  • 肌酸酐

这是应用程序的样子:

Showing the UI off

为了简化这个过程,我决定将性别选择作为下拉菜单,这引起了一些问题,因为我设置了这样的问题:

Drop Down properties

与按钮相关的数学看起来像这样:

  function CalculateButtonPushed(app, event)
            gender = app.PatientGenderDropDown.Value ;
            age = app.PatientAgeEditField.Value ;
            weight = app.LeanBodyWeightEditField.Value ;
            serum = app.SerumCreatinineEditField.Value ;
            final = (gender*(age)*weight) / (serum) ;
            app.ResultEditField.Value = final ;
        end
    end

运行此命令会出现以下错误:

  

使用时出错   matlab.ui.control.internal.model.AbstractNumericComponent / set.Value   (第104行)'价值'必须是数字,例如10。

据我所知,我输入ItemsData的值是数值。我错过了什么或者有更好的方法吗?

谢谢,

詹姆斯

1 个答案:

答案 0 :(得分:1)

如果在相应行上的违规文件中放置断点(通过运行以下代码),

dbstop in uicomponents\+matlab\+ui\+control\+internal\+model\AbstractNumericComponent.m at 87

点击按钮后,您可以在工作区中看到以下内容:

workspace snapshot

这里有两个不同的问题,可以通过查看newValue验证码(显示在AbstractNumericComponent.m中)来识别这两个问题:

% newValue should be a numeric value.
% NaN, Inf, empty are not accepted
validateattributes(...
    newValue, ...
    {'numeric'}, ...
    {'scalar', 'real', 'nonempty'} ...
    );

以下是问题:

  1. 新值是NaN 的向量
    原因在于这一行:

    final = (gender*(age)*weight) / (serum) ;
    

    其中serum的值为0 - 所以这是您应该照顾的第一件事。

  2. 新值为 NaN的向量
    这是一个单独的问题,因为set.Value函数(当您将某些内容分配到Value字段时隐式调用)预期会出现标量。这是因为gender1x4 char array - 所以它被视为4个单独的数字(即假设ItemsData为数字是不正确的)。在这种情况下,最简单的解决方案是在使用前str2double。或者,将数据存储在另一个位置 (例如图中的私有属性),确保它是数字。