2009-11-30 568 views
2

我有两个函数:一个用按钮创建UI,另一个用来执行与按下按钮相同的功能。如何从MATLAB的另一个函数文件执行回调函数?

当我深入到数字与get(gcf,'children')我找到按键,具有回调属性,它看起来像这样:

ans = 
    [function_handle] 
    [    1] 
    [    1] 
    [1x6 double] 

现在,据我了解,与第一个数组元素,我应该能够执行与从UI按下按钮时执行的功能相同的功能,但我该怎么做?我尝试了一切,但似乎没有任何工作。

回答

3

从你得到的按钮回调的结果,它出现回调已按以下方式(只是举例)创建:

hButton = uicontrol(...,'Callback',{@button_callback,1,1,[1:6]}); 

在回调函数button_callback定义如下:

function button_callback(hObject,eventdata,a,b,c) 
    ... 
end 

注意到有two extra arguments in the input argument list为回调函数:hObjecteventdata(事件数据的结构)(调用回调对象的句柄)。

如果你想与应该传递给它的3个额外的参数(11,和一个1×6阵列)来调用功能句柄,则需要也传递参数为hObjecteventdata输入。以下是如何调用该函数会看(使用变量ans):

ans{1}(hButton,[],ans{2:end}); 

您首先从单元阵列(ans{1}),那么call it using parentheses as you would any other function得到函数句柄。对于hObject,您可以将句柄传递给uicontrol对象(如果不需要,则为空值),对于eventdata,您可以传递一个空值。然后从单元阵列获取附加值作为comma-separated listans{2:end}),并将每个值作为单独的附加参数传递给该函数。

+0

在回答这个问题之后,没有太多的问题要问。 :)我得到的是单元阵列..以前从未使用过它们,所以没有意识到我应该以不同的方式读取它们({}而不是[])。 – JussiR 2009-12-01 09:06:46

1

你可以用()运算符来调用它,或者你可以将它传递给feval。你需要首先从单元阵列中提取它。

x; % holds your ans from original question 
fcn = x{1}; % Extract from cell array 
fcn(); % call with() syntax 
feval(fcn); % call with feval() syntax 

如果这不起作用,请张贴确切的代码和错误信息,以便我们可以看到发生了什么问题。

+0

谢谢!两个很好的答案。 – JussiR 2009-12-01 09:04:29

相关问题