サブ関数に handles構造体が引き渡されたとき、サブ関数は独自にhandles 構造体のコピーを持ちます。そのため、サブ関数の内部で handles構造体が更新されても、GUI(Figure)自身としての handles構造体は更新されていません。
なお、代替案として以下の2つの方法があります。
1. サブ関数の出力引数として handles構造体を定義する方法
2. コールバック関数内で handles構造体を更新する方法
それぞれについて説明します。
1. サブ関数の出力引数として handles構造体を定義する方法
サブ関数の出力引数として handlles構造体を定義し、コールバック関数で呼び出したときに更新された handles構造体を取得します。
% コールバック関数
function callback(hObject,eventdata,handles)
handles = subfunction(handles); % 出力変数を付けてサブ関数を呼びだし
v = handles.newfield;
% サブ関数
function handles = subfunction(handles)
handles.newfield = 1;
guidata(handles.figure,handles)
2. コールバック関数内で handles 構造体を更新する方法
コールバック関数内でサブ関数を呼び出した後、GUIDATA関数を使用し、handles 構造体を更新します。
% コールバック関数
function callback(hObject,eventdata,handles)
subfunction(handles);
handles = guidata(hObject); % handles構造体のリロード
v = handles.newfield;
% サブ関数
function subfunction(handles)
handles.newfield = 1;
guidata(handles.figure,handles)