我有一个按钮组,里面有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)一样。它起作用了。所以我猜问题应该是关于参数的数量,但我仍然没有找到关于它的详细信息。任何提示都赞赏!!
答案 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)