2017-08-14 187 views
0

我想使用m代碼將參數添加到掩碼選項卡。 假設我想添加一個「編輯」參數和一個「彈出」參數。Simulink:以編程方式添加控件到simulink掩碼選項卡

到目前爲止,我不能把它們放在標籤中,他們留在普通組中。 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類,但我不知道哪些對象實際屬於它,也不知道它是否可以幫助我。

感謝您的幫助,我只需要一個簡單的例子來告訴我如何做到這一點。

+1

如果可能的話,你往往更好設計的對話框會對這一切有望控制在一開始,然後只需撥動「可見」屬性,當你需要/唐不需要特別的控制。 –

+0

這就是我們要做的事情,因爲無論如何,掩碼不需要是動態的(我們只需要幾個不同的掩碼用於相同的接口類)。但是我找到了解決方案 – Zangdar

回答

0

下面是做到這一點的好方法:使用上面提到的'moveTo'方法。

訪問從Simulink.MaskParameter參數Simulink.dialog.parameter(其中包含moveTo方法),你只需要創建,您需要使用getDialogControl上Maskparameter

令人費解和複雜?是的,但這就是你必須要做的。

這裏是一個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); 
相關問題