2014-09-19 42 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