你可以只通過在hObject
參數的函數來代替,而當它使用guidata
需要檢索你的價值;即
function some_callback(hObject, handles, ...)
myLoopingFunction(hObject, ...);
function myLoopingFunction(hObject, ...)
for someVar = something
% Update handles structure
handles = guidata(hObject);
end
或者,你可以創建一個句柄對象,並把它放在句柄結構中;例如,
% In a separate file:
classdef uiState < handle
% Probably should give this class a less general name...
properties
StatusData
end
end
% In your UI file:
function some_callback(hObject, handles, ...)
handles.state = uiState();
handles.state.StatusData = false;
% Now, when you modify handles.StatusData, the version used by
% myLoopingFunction will also be updated, because they point to
% the same object!
myLoopingFunction(handles.state);
function myLoopingFunction(state, ...)
for someVar = something
% Now you just have to check state.StatusData
end
對於簡單的情況,我會使用第一種方法。對於更復雜的情況,需要跟蹤幾個參數並以複雜的方式進行交互,我將使用第二個參數。如果你在一些變量中有大量的數據並且想阻止它被複制到對UI的每次調用中,第二種方法也很有用。
就個人而言,對於複雜的用戶界面,我通常會創建一些跟蹤用戶界面的應用程序類(併爲其提供命令行界面),並確保始終可用於我的用戶界面,但這是一個有點像使用大錘在這種簡單的情況下打開果醬罐。
您的描述有點令人困惑..當在MATLAB GUIDE中設計GUI時,所有的回調函數都會收到'handles'結構。您可以從中檢索值以及設置值(請記住調用'guidata'來更新它們,因爲'handles'是按值傳遞的,而不是作爲引用對象傳遞的) – Amro