Simulink:以编程方式将控件添加到simulink掩码选项卡

时间:2017-08-14 18:38:20

标签: matlab tabs simulink mask

我正在尝试使用m代码向掩码选项卡添加参数。 我们想说我想添加一个'编辑'参数和弹出式按钮参数。

到目前为止,我无法将它们放在标签中,它们会保留在一般组中。 mathworks文档未能提供工作指南:

  • 除了' text'之外的其他所有内容,addDialogControl方法都失败了。和超链接'项目
  • ' TabName'参数发出警告(将被删除,不允许使用)。警告说"使用选项卡对话框控件向选项卡添加参数"。没有关于此的文档,没有任何文件。
  • 他们提供的示例不完整,不会显示结果(参数不在标签中),请参阅此链接:https://www.mathworks.com/help/simulink/ug/control-masks-programmatically.html#bu47973-4

我注意到有一个Simulink.dialog.Control类有一个' moveTo'方法,但参数不是Simulink.dialog.Control,它们是Simulink.MaskParameter实例。还有一个Simulink.dialog.parameter.Control类,但我不知道哪些对象实际上属于它,也不知道它是否可以帮助我。

感谢您的帮助,我只需要一个最小的例子来告诉我如何做到这一点。

1 个答案:

答案 0 :(得分:0)

这是一个很好的方法:使用上面提到的'moveTo'方法。

要从刚刚创建的Simulink.MaskParameter访问参数Simulink.dialog.parameter(包含moveTo方法),您需要在Maskparameter上使用getDialogControl

复杂而复杂?是的,但那是你必须要做的。

这是一个MWE:

block = 'Untitled1/Atomic Subsystem';

wMask = Simulink.Mask.get(block);

if ~isempty(wMask)
    wMask.delete();
end

wMask = Simulink.Mask.create(block);

wMask.addDialogControl('tabcontainer','tabContainer');

wTabContainer = wMask.getDialogControl('tabContainer');

wTab1 = wTabContainer.addDialogControl('tab', 'Tab1');
wTab2 = wTabContainer.addDialogControl('tab', 'Tab2');

wTab1.Prompt = 'Programatically added tab1';
wTab2.Prompt = 'Programatically added tab2';

wTextOnFirst            = wTab1.addDialogControl('text', 'textOnFirst');
wTextOnFirst.Prompt     = 'Some text on the first tab';
wTextOnSecond           = wTab2.addDialogControl('text', 'textOnSecond');
wTextOnSecond.Prompt    = 'Some text on the first tab';

wField = wMask.addParameter('Name', 'TextField' ...
    , 'Type', 'edit'...
    , 'Prompt', 'Programatically added text field'...
    , 'Value', 'Toto'...
    , 'Evaluate', 'on'...
    , 'Tunable', 'off'...
    , 'Enabled', 'on'...
    , 'Visible', 'on'...
    , 'Callback', 'disp( get_param(gcb, ''TextField''))');


wPopup = wMask.addParameter('Name', 'PopupField' ...
    , 'Type', 'popup'...
    , 'Prompt', 'Programatically added popup field'...
    , 'TypeOptions', {'Value1', 'Value2', 'Value3'}...
    , 'Evaluate', 'on'...
    , 'Tunable', 'off'...
    , 'Enabled', 'on'...
    , 'Visible', 'on'...
    , 'Callback', 'disp( get_param(gcb, ''PopupField''))');

wFieldDialog = wMask.getDialogControl('TextField');
wPopupDialog = wMask.getDialogControl('PopupField');

wFieldDialog.moveTo(wTab1);
wPopupDialog.moveTo(wTab2);