2012-04-07 206 views
2

我有兩個GUI namesd masir和放樣
放樣GUI是masir子GUI(按下masir將打開放樣按鈕) 要訪問masir的數據放樣我有這些兩行代碼:關係主界面的和子GUI的

masirGUIhandle = masir; 
masirGUIdata = guidata(masirGUIhandle); 

但正如我在放樣工作(在打開的功能我已經爲我的變量設置一些初始值,現在我不希望那些運行這兩條線將運行masir的開啓功能初始值,我需要爲我的變量更改值),所以我不想讓masir GUI的OpeningFcn運行,我只需要有權訪問SetOut中的masir數據 What c我會解決這個問題嗎?

任何人都可以幫助我解答這個問題並解釋更多嗎?

I use this easy way for data sharing between GUIs 
%In the end of OpeningFcn of Main GUI 
setappdata(0,'HandleMainGUI',hObject); 
%When you want to edit shared data you must get the handle 
HandleMainGUI=getappdata(0,'HandleMainGUI'); 
%write a local variable called MyData to SharedData, any type of data 
setappdata(HandleMainGUI,'SharedData',MyData); 
%get SharedData and save it to a local variable called SomeDataShared 
SomeDataShared=getappdata(HandleMainGUI,'SharedData'); 
Don't forget to clean up the data shared in the CloseReqFcn of you main GUI 
HandleMainGUI=getappdata(0,'HandleMainGUI'); 
rmappdata(HandleMainGUI,'MySharedData') %do rmappdata for all data shared 
Remember that your GUIs might try to getappdata that doesn't exist, you should first  test if it does exist 
if (isappdata(0,'HandleMainGUI') & isappdata(HandleMainGUI,'MySharedData')) 
%get, set or rm appdata 
else 
%do something else, maybe loading default values into those variables 
end 

告訴我更多關於哪一行代碼應該寫在MainGUI中,哪一行應該寫在SubGUI中?
並告訴我CloseReqFcn是什麼意思?

+0

您能否擴展該示例?不清楚你的問題是什麼。 – bdecaf 2012-04-08 08:21:01

+0

我的問題與此問題完全相同:[link](http://www.mathworks.fr/matlabcentral/answers/338-how-to-pass-data-from-one-gui-to-another)但我需要更多的幫助,因爲答案建議不起作用 – sepideh 2012-04-08 18:58:48

回答

2

那麼讓我總結一下我如何看待問題。

想要從SetOut讀取數據而不創建它?這是不可能的,因爲數據將在創建窗口時創建。

一個很好的和系統的方式周圍會做它面向對象(見Model-View Controller Pattern)您可以或多或少地從我的答案here複製一個例子(示例事件 - 觀察員)


但是,如果你」 ð喜歡你的代碼堅持我也有一些想法:

  • 如果你不想窗口來顯示你可以設置它無形與set(theGUIhandle,'Visible','off')

  • 雖然沒有關閉窗口,您可以用getappdata(theGUIhandle)

  • 獲得的數據。如果你想後,關閉窗口,你需要有一個將其存儲在窗外的函數的數據。