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