2014-09-19 82 views
0

我已經在Matlab中的幾個回調選項之間共享數據,但是目前爲止還沒有成功。我有一個gui有多個表,我用它來獲取用戶的輸入。我有不同的表的多個回調函數。我想在回調2中使用表1和回調1中的數據以及表2中的日期。在Matlab中回調數據共享

function MaterialProperties(Material, Data) 
Material_data = get(Material, 'Data'); 
% Avoid bluehighlight in table 
set(Material,'Data',{'dummy'}); 
set(Material,'Data', Material_data);  
% Store variable in workspace 
assignin('base','Material_data',Material_data) 
%Mat_data = guidata(gcbo); 
%for i=1:size(Material_data,2) 
% Mat_data.MatData{i}=Material_data{i}; 
%end 
% Save the change you made to the structure 
guidata(gcbo,Mat_data) 
assignin('base','Mat_data',Mat_data) 
end 

function Stacking_sequence(Layup, Data) 
% I want to use the date (Material_data) of MaterialProperties here in this callback 

layup_data = get(Layup, 'Data'); 
%overwrite data with a dummy and restore the old data afterwards, to force deselection 
set(Layup,'Data',{'dummy'}); 
set(Layup,'Data', layup_data); 
%store variable in workspace 
assignin('base','layup_data',layup_data) 

layup = strsplit(layup_data{1,1},'\'); 
assignin('base','layup',layup) 

end 

任何人都可以幫忙。我試過theMatlab的幫助,但在那裏提出的建議並沒有工作(也許我錯誤地實現了)

回答

1

它看起來像你只需要在回調2開始時檢索句柄結構,就像你在第一個回調:

Mat_data = guidata(gcbo); 

之後它應該在第二個回調中可用。順便說一句,這條線和它後面的3條線在你的代碼中被評論是錯誤的?

替代解決方案:

作爲一種替代的解決方案,可以使用setappdata/getappdata到在命令窗口函數回調之間以及共享數據,這取決於你存儲這些數據。

例如,如果您使用的是這樣的事情在第一次回調結束時,保存Material_data

setappdata(0,'MatData',Material_Data); % Save in the Matlab root 0 (accessible everywhere), and give some dummy name) 

然後在第2回調的開始,您可以使用getappdata檢索數據

Material_Data = getappdata(0,'MatData'); 

你很好走。您可以使用例如handles.FigureGUI或圖的任何名稱,而不是使用0根,也可以將數據存儲在GUI本身中。那麼只有在數字未被關閉/刪除的情況下,數據纔可用。玩這些,看看你喜歡什麼。

希望有幫助!

+0

謝謝!這有幫助! – user5489 2014-09-19 14:10:13

+0

太棒了!很高興它工作 – 2014-09-19 14:13:08

+0

但是,一個更快的問題。如果我把手柄gcbo改成例如bla,我收到一個錯誤,說未定義變量'bla'。我怎樣才能改變手柄。謝謝! – user5489 2014-09-19 14:49:03