2017-09-22 6 views
0

文字ベクタコールバックを関数ハンドルに変換しようとしています。しかし、私は匿名関数を使ってセル配列を作成できると仮定した複数のコールバックを呼び出していますか?ここでMATLAB GUIでの複数のコールバック

はコードです:私がやろうとしています何

guiel.hPB(2)=uicontrol(guiel.cPanel(2),'Style','PushButton','Units','pixels',... 
     'TooltipString',guiel.plotTt,... 
     'Position',[cnst.bhspace 3*cnst.bvspace+2*cnst.bheight cnst.bwidth cnst.bheight],... 
     'String','Run Simulation','fontsize',10,'FontWeight','Demi',... 
     'CallBack','eval(codeblk.CLOSE_MDL_FCN); set(guiel.cPanel(4),''Visible'',''off'');set(guiel.APPWINDOW,''Resize'',''off''); primePlot;',... 
     'Enable','off'); 

は無名関数ハンドルする関数ハンドルと休息にcodeblk.CLOSE_MDL_FCNを書くことですか?しかし、私はどのようにそれを行うことができるか分からない。

codeblk.CLOSE_MDL_FCN = ['if ~isempty(find_system(''Name'',vars.simfilename))'... 
        'vars.simtime = str2num(get_param(vars.simfilename,''StopTime''));'... 
        'set(guiel.hSimtime,''String'',num2str(vars.simtime));'... 
        'save_system(vars.simfilename);'... 
        'close_system(vars.simfilename);'... 
        'end']; 

答えて

1

creating a callbackfunction handleを使用してのアイデアは、そのGUIオブジェクトがと相互作用したときのためにすべてを処理するため単一関数であることです。 cell array callbackの使用は、複数の関数を呼び出すためではなく、関数に追加のデータを渡す必要がある場合に使用します。ここで私はあなたがボタンのコールバックをデザインすることをお勧め方法は次のとおりです。

guiel.hPB(2) = uicontrol(..., 'CallBack', @callback_hPB2, ...); 

そして、あなたは、2つのnested functionsを定義します

function callback_hPB2(~, ~) 
    close_fcn(); 
    set(guiel.cPanel(4), 'Visible', 'off'); 
    set(guiel.APPWINDOW, 'Resize', 'off'); 
    primePlot(); 
end 

function close_fcn 
    if ~isempty(find_system('Name', vars.simfilename)) 
    vars.simtime = str2num(get_param(vars.simfilename, 'StopTime')); 
    set(guiel.hSimtime, 'String', num2str(vars.simtime)); 
    save_system(vars.simfilename); 
    close_system(vars.simfilename); 
    end 
end 
関連する問題