2009-11-30 102 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

相關問題