Handles problem

2 次查看(过去 30 天)
William
William 2011-10-12
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.

采纳的回答

Walter Roberson
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 个评论
Walter Roberson
Walter Roberson 2011-10-12
http://www.mathworks.com/help/techdoc/ref/ancestor.html
William
William 2011-10-12
I cannot figure this out. Is there an easier way to pass variaables from one function to another? I tried using global but I cannot get the variable itself to become actually "global"
Thanks again

请先登录,再进行评论。

更多回答(1 个)

Fangjun Jiang
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
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
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 CenterFile 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!

Translated by