Handles problem
2 次查看(过去 30 天)
显示 更早的评论
Greetings.
I am trying to add a user defined variable to the "hObject" Handles via two radio buttons.
The radio button calling is here:
set(handles.boardsize,'SelectionChangeFcn',@boardsize_SelectionChangeFcn);
The actual code that uses "setappdata is here:
function boardsize_SelectionChangeFcn(hObject, eventdata)
%retrieve GUI data, i.e. the handles structure
handles = guidata(hObject);
switch get(eventdata.NewValue,'Tag') % Get Tag of selected object
case 'button5800'
%execute this code when 5800 is selected
setappdata(hObject,'boardtype',0)
disp('this is working')
case 'button9800'
%execute this code when 9800 is selected
setappdata(hObject,'boardtype',1)
disp('this is working')
otherwise
% Code for when there is no match.
end
%updates the handles structure
guidata(hObject, handles);
Then later on I try and get the add data within the main function
boardsize = getappdata(hObject,'boardtype')
But the board type variable is always empty "[]" Am I updating the wrong handles? This one has had me for a while. Thanks to all who look at it.
0 个评论
采纳的回答
Walter Roberson
2011-10-12
setappdata() and getappdata() do not take the handles structure as their first argument. They take the handle of a single graphics object, and they act with respect to that exact graphics object.
This differs from guidata() in that guidata climbs the hierarchy of the object given to it in order to find the ancestor figure and attaches the app data to that figure.
If you want to attach app data to your figure, find the figure first. For example,
setappdata(ancestor(hObject,'figure'),'boardtype',1);
4 个评论
更多回答(1 个)
Fangjun Jiang
2011-10-12
I believe it is setappdata(handles,'boardtype',0), not setappdata(hObject,...), same for getappdata().
EDIT: My above answer is incorrect. See Walter's answer.
The correct approach should be:
- Use setappdata(hObject,'boardtype',0) as you did inside function boardsize_SelectionChangeFcn(hObject, eventdata)
- Within the main function, use boardsize = getappdata(handles.boardsize,'boardtype')
Another way to store the data for the object is to use the 'UserData' property of the object.
5 个评论
Fangjun Jiang
2011-10-12
The error message indicates that you have a data type conversion problem. Put a break point at line "boardsize = getappdata(handles,'boardtype')", when it stops at that line, just run class(getappdata(handles,'boardtype')) in Command Window to see what is the data type.
Fangjun Jiang
2011-10-12
Sorry for giving you bad advice. Now Walter has pointed out the problem. The error message makes sense. "handles" is a structure containing handles of different GUI objects. Running getappdata(handles,'boardtype') will make it try to convert "handles" (which is a structure) into an object handle (which is a double).
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Maintain or Transition figure-Based Apps 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!