代わりにパラメーターを関数に渡すだけで、hObject
必要なときに値を取得できますguidata
。つまり、
function some_callback(hObject, handles, ...)
myLoopingFunction(hObject, ...);
function myLoopingFunction(hObject, ...)
for someVar = something
% Update handles structure
handles = guidata(hObject);
end
または、ハンドル オブジェクトを作成し、それを handles 構造体に配置することもできます。例えば、
% 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
単純なケースでは、最初の方法を使用します。いくつかのパラメーターを追跡する必要があり、それらが複雑な方法で相互作用する、より複雑な状況では、2 番目のパラメーターを使用します。2 番目の方法は、変数に大量のデータがあり、UI へのすべての呼び出しにコピーされるのを防ぎたい場合にも役立ちます。
個人的には、複雑な UI の場合、通常はユーザー インターフェイスを追跡するアプリケーション クラスを作成し (コマンド ライン インターフェイスを提供する)、UI で常に使用できるようにしますが、これは、このシンプルなケースでジャムの瓶を開ける大ハンマー。