MATLAB回调函数:未定义函数?

时间:2016-08-18 16:39:44

标签: matlab oop event-listener

我有一个按钮组,里面有3个单选按钮,还有一个显示部分。

我想要的效果是,一旦选择了一个单选按钮,显示部分也会改变。

我使用类实现它,并在创建这些组件时添加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(app)一样。它起作用了。所以我猜问题应该是关于参数的数量,但我仍然没有找到关于它的详细信息。任何提示都赞赏!!

1 个答案:

答案 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(与选择事件相关联的事件数据),那么您可以进行回调&# 34;忽略"这些第二和第三个输入通过执行类似

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

你的方法看起来像

function controlBtnGroupSelectionChanged(app)