Is it possible to pass a variable throu a callback function?
    5 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
    Merse Gaspar
 le 28 Mai 2023
  
    
    
    
    
    Commenté : Walter Roberson
      
      
 le 28 Mai 2023
            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 commentaires
Réponse acceptée
  Walter Roberson
      
      
 le 28 Mai 2023
        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 commentaires
  Walter Roberson
      
      
 le 28 Mai 2023
				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
Plus de réponses (0)
Voir également
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!