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!