guidata(handles) does not save ALL handles in a Callback function in GUIDE
1 次查看(过去 30 天)
显示 更早的评论
I have two callback functions defined as follow:
function hpos(hObject, pos, handles)
handles.A.L{handles.im}=value1;
guidata(hObject, handles);
function hpos2(hObject, pos, handles)
handles.A.R{handles.im}=value2;
guidata(hObject, handles);
They work fine until I try (I use the function "disp" here to get a visual feedback of what was saved):
disp(handles.A.L,handles.A.R)
Only the latest handles exists, as if it overwrote the previous one. So I get either
"Reference to non-existent field 'L'."
or
"Reference to non-existent field 'R'."
depending on what was the last updated field of the structure A.
Of course the goal is to use these value elsewhere in my code, so understanding how to save them correctly will help a lot! Thank you!
0 个评论
采纳的回答
Jan
2018-2-22
编辑:Jan
2018-2-22
From where are these callbacks called? Is handles the current value of the handles struct or does it contain the value of the struct as it was during the creation of the callback? The debugger will tell you this, simply set some breakpoints and check the contents of handles.
A solution is to get the current value of the struct at first:
function hpos(hObject, pos, handles)
handles = guidata(hObject);
handles.A.L{handles.im}=value1;
guidata(hObject, handles);
function hpos2(hObject, pos, handles)
handles = guidata(hObject);
handles.A.R{handles.im}=value2;
guidata(hObject, handles);
Or maybe another callback is responsible for resetting handles.A unexpectedly? Again the debugger will help you.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Startup and Shutdown 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!