How to call the Callback function (in a subfunction of another Callback function)?
    5 views (last 30 days)
  
       Show older comments
    
    QiQin Zhan
 on 4 Mar 2013
  
    
    
    
    
    Commented: Darshan Shah
 on 25 Nov 2016
            The following is my code:
function pushbutton1_Callback(hObject, eventdata, handles)
  body
function pushbutton2_Callback(hObject, eventdata, handles)
  subfun(hObject, eventdata, handles)  % sub(...) is a subfunction or a .m file
function subfun(hObject, eventdata, handles)
   pushbutton1_Callback(hObject, eventdata, handles) % call pushbutton1_Callback
It's strange that matlab show the error message:
Undefined function 'pushbutton1_Callback' for input arguments of type 'struct'. I want to know how to call the function 'pushbutton1_Callback()' in function 'subfun()'.Thanks
0 Comments
Accepted Answer
  Sean de Wolski
      
      
 on 4 Mar 2013
        You will have to pass the subfunction handles back from the main function:
%%%begin main.m%%%%
function [y, fh] = main(x)
y = pi*x;
fh = @subfun
function Q = subfun(a,b)
Q = a+b
%%%end main.m%%%
Now when you call main: you get the function handle back.
[y,fh] = main(2);
fh(1,2);
1 Comment
  Darshan Shah
 on 25 Nov 2016
				Can you explain this in detail. I am struggling to use this explanation. I am new to GUIDE and programming.
More Answers (2)
  Jan
      
      
 on 4 Mar 2013
        The error message means, that:
- either the function pushbutton1_Callback is not visible ftom subfun(), e.g. if the callback is a subfunction of an M-file, but subfun() is stored in another M-file.
 - or you use a struct as first input, while the callback requires the handle of the button as 1st input:
 
pushbutton1_Callback(ButtonHandle, EventData, handles)
Here EventData could be the empty matrix, if the callback function can handle this.
0 Comments
  QiQin Zhan
 on 4 Mar 2013
        2 Comments
  Jan
      
      
 on 4 Mar 2013
				
      Edited: Jan
      
      
 on 4 Mar 2013
  
			@Chan: Is this a comment? If so, does it concern my answer? If so, please post this as a comment to reduce the confusion level.
Only the first function of an M-file can be called from other M-files. So either include a wrapper, such that the 1st function forwards the call to different subfunctions, or save the functions to individual M-files.
See Also
Categories
				Find more on Performance and Memory in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!