2016-08-18 243 views
1

我有一個按鈕組,裏面有3個單選按鈕,還有一個顯示部分。MATLAB回調函數:未定義函數?

我想要的效果是,一旦選擇一個單選按鈕,顯示部分也會改變。

我實現它使用一個類,並創建這些組件時添加SelectionChangedFcn

app.ControlButtonGroup.SelectionChangedFcn = {@controlBtnGroupSelectionChanged, app} 

我在其中createComponents.m功能文件保存在同一文件中定義的函數controlBtnGroupSelectionChanged(obj, eventData, app)

但是,當我點擊不同的無線電,錯誤消息如下:

未定義的函數「controlBtnGroupSelectionChanged」的輸入類型的 參數「matlab.ui.container.ButtonGroup」。錯誤而 評估的ButtonGroup SelectionChangedFcn

我也聲明controlBtnGroupSelectionChanged功能在我的課的私有方法。

的controlBtnGroupSelectionChanged函數爲:

function controlBtnGroupSelectionChanged(obj, eventData, app) 
% Update display section as the radio button in control section is changed 

    %new = app.ControlButtonGroup.NewValue; 
    new = obj.SelectedObject.String; 
    switch new 
     case 'Transfer Path' 
      % display the transfer path 
      imagesc(app.curImage,'Parent',app.DisplayPath); 
      app.DisplayPath.Visible = 'off'; 
     case 'Store' 
      % display the store text 
      text(curStore,'Parent',app.DisplayPath); 
     case 'Mill' 
      % Display the Mill text 
      text(curMill,'Parent',app.DisplayPath); 
    end 
end 

的是,在該類中定義的部分是如:

methods (Access = private) 

    % Create UIFigure and components 
    createComponents(app); 

    % Callback function for Control Button Group Selection Changed 
    controlBtnGroupSelectionChanged(obj, eventData, app); 

end 

而在的createComponents功能涉及於該部件:

app.ControlButtonGroup = uibuttongroup(app.UIFigure); 
    app.ControlButtonGroup.Title = 'Control'; 
    app.ControlButtonGroup.FontSize = 16; 
    app.ControlButtonGroup.Units = 'Normalized'; 
    app.ControlButtonGroup.Position = [0.45 0.75 0.45 0.2]; 
    app.ControlButtonGroup.SelectionChangedFcn = {@controlBtnGroupSelectionChanged,app}; 

爲什麼說我的函數是不確定的?

更新: 我已經通過一些其他演示,並更改回調爲app.ControlButtonGroup.SelectionChangedFcn = @(h,e)controlBtnGroupSelectionChanged(app)。並定義(也原型)它就像controlBtnGroupSelectionChanged(應用程序)。它的作品。所以我想這個問題應該是關於參數的數量,但我仍然沒有找到有關這方面的詳細信息。任何提示都表示讚賞!

+2

您確定您的函數名沒有錯字嗎?另外它會有助於您發佈實際文件。 – Suever

+0

是的,我複製了名字,以防萬一我沒有輸錯。而我只是雙重檢查它 –

+0

我想知道是否可能是從另一個私人調用私人方法的問題? –

回答

1

您實際上需要提供該對象作爲該函數的第一個參數,以便MATLAB知道將其作爲app的一種方法。

app.ControlButtonGroup.SelectionChangedFcn = @(s,e)controlBtnGroupSelectionChanged(app, s, e); 

% Or this way which implicitly passes the two input parameters 

app.ControlButtonGroup.SelectionChangedFcn = @app.controlBtnGroupSelectionChanged; 

然後你的方法應該是這樣的

function controlBtnGroupSelectionChanged(obj, source, event) 

如果您不需要source(手柄控制按鈕組)或event(與選擇事件相關聯的EVENTDATA)然後你可以有你的回調做類似

app.ControlButtonGroup.SelectionChangedFcn = @(s,e)app.controlBtnGroupSelectionChanged(); 

「忽略」這些第二和第三輸入和你的方法看起來就像

function controlBtnGroupSelectionChanged(app) 
+0

Thx!我應該定義什麼參數。 controBtnGroupSelection(app),還是一無所有? –

+0

@MichelleShieh這取決於你是否需要前兩個參數。我已更新瞭解釋 – Suever

+0

非常感謝!你完全解決了我的問題!只是想知道爲什麼我們需要調用之前的(s,e)? Prestate的東西?有沒有關於它們的概念解釋/文檔? –