2016-08-18 203 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的东西?有没有关于它们的概念解释/文档? –