2011-04-27 110 views
5

我試圖通過編程的方式在MATLAB中創建一個點擊事件,它將模仿用戶點擊一個GUI對象。該對象的回調函數是一個子函數,所以我不能直接調用它。但是,我能夠得到的對象,這最終是一個3×1單元陣列包含以下內容的回調性質:如何模仿用戶點擊以調用GUI對象的回調函數?

@uiBlockFn/callback_til [ 188.0011] [1x1 struct] 

我如何可以調用這個回調函數代碼這樣它模仿了用戶點擊GUI對象時會發生什麼?

+0

而不是使用一個子功能的回調,你可以把它變成一個私有/功能,你可以從打電話另一個文件? – Alex 2011-04-27 01:41:30

+0

這將是最方便的,但我不能。作者只給了我作爲p代碼而不是m代碼的功能。從我的理解來看,這個函數依賴於其他幾個子函數。 – Anny 2011-04-27 02:15:39

+0

你有什麼形式的回調?你有一個函數句柄或回調的字符串名稱?你能從GUI對象本身獲得回調函數嗎? – gnovice 2011-04-27 03:44:23

回答

7

比方說,你有一個圖形與手柄hObject對象,你有一個像這樣的對象回調:

callbackCell = get(hObject,'Callback'); 

正如你提到的,單元陣列callbackCell你得到最終是一個3元單元陣列在第一個單元中具有function handle,而在其他兩個單元中具有其他數據。當callback for an object is defined as a cell array(就像你的情況一樣),回調函數句柄(或字符串名稱)存儲在第一個單元格中,並且希望傳遞給回調函數的附加輸入參數位於其餘單元格中。

但是,當該對象被激活時調用該回調函數時,實際上會在輸入參數列表的開始處自動插入2個附加參數。它們是:

  • hObject:現在正在調用其回調的對象的句柄。
  • eventData:與用戶激活事件相關的數據結構,通常只是空矩陣[]a few cases除外)。

所以,如果你想模仿對象的動作被用戶激活時,你會想調用回調函數如下(假設無需事件數據):

callbackCell{1}(hObject,[],callbackCell{2:end}); 
+0

非常好,它完美的作品。謝謝! – Anny 2011-04-27 04:47:51