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



我正在尝试使用 m 代码将参数添加到掩码选项卡。 假设我想添加一个"编辑"参数和一个"弹出"参数。

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

  • 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 类,但我不知道哪些对象实际上属于它,也不知道它是否能帮助我。

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

这是这样做的好方法:使用我上面提到的"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);

最新更新