Is it possible to pass a variable throu a callback function?
9 次查看(过去 30 天)
显示 更早的评论
My problem is, that I have lots off similar buttons, generated inside a for cycle, and I dont want to write the same number of callback functions. It would suffice if a parameter could be passed to indicate which button is called, i.e. which button calls the function. Example:
for i = 1:100
mybutton(i) = uicontrol('Style','pushbutton','String',sprintf('Nr. %d',i),'Position',[30*i,10,20,20],'BackgroundColor',[.5 .5 .5],'Callback',{@button_Callback});
end
0 个评论
采纳的回答
Walter Roberson
2023-5-28
Yes. In general see http://www.mathworks.com/help/matlab/math/parameterizing-functions.html
However, in the special case of setting up callbacks, when you use the cell syntax like you do in 'Callback',{@button_Callback} then anything you put as additional cell elements will be passed as an additional parameter to the function. So for example if you had 'Callback', {@button_Callback, i} then the value of i as of the time the control is built, would be passed as the third parameter to button_Callback so you could know the button number.
However... even that turns out to be unnecessary. When a callback is invoked, the first thing passed to the callback is the handle to the object that the callback is about. So even with just 'Callback',{@button_Callback} the first parameter passed to button_Callback would be the handle to the uicontrol, same as what would have been stored into mybutton(i) . You can use that to access the uicontrol properties, including the String property, or including any UserData that you might have set when you built the uicontrol.
2 个评论
Walter Roberson
2023-5-28
You would declare
function button_Callback(hObject, event, button_number)
and access button_number inside the callback.
As I indicate though, you do not need to do this as you can access hObject.String or hObject.UserData. For example,
for i = 1:100
mybutton(i) = uicontrol('Style', 'pushbutton', ...
'String', sprintf('Nr. %d',i), ...
'Position', [30*i,10,20,20], ...
'BackgroundColor', [.5 .5 .5], ...
'Callback',@button_Callback, ...
'UserData', i);
end
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Migrate GUIDE Apps 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!