为什么这不起作用?正如您在下面的错误报告中所看到的,字段handles.check不会被带到回调函数。
function example2_4
N=500;
M=300;
handles.fig=figure('Units','Pixels',...
'Position',[100 100 N M])
handles.axes=axes('Units','Pixels',...
'Position',[25 25 N-200 M-50]);
handles.check=uicontrol('style','checkbox',...
'string','Enable Axes Grid Lines',...
'Position',[N-150,M/2-25 150 50],...
'Callback',{@checkbox_callback,handles});
function checkbox_callback(gcf,event_data,handles)
handles
val=get(handles.check,'Value');
if val
grid on;
else
grid off;
end
错误报告:
handles =
fig: 2
axes: 331.0076
Reference to non-existent field 'check'.
Error in example2_4>checkbox_callback (line 19)
val=get(handles.check,'Value');
Error while evaluating uicontrol Callback
然而,这个确实有效。这次handle.check被带到回调函数。
function example2_4
N=500;
M=300;
handles.fig=figure('Units','Pixels',...
'Position',[100 100 N M]);
handles.axes=axes('Units','Pixels',...
'Position',[25 25 N-200 M-50]);
handles.check=uicontrol('style','checkbox',...
'string','Enable Axes Grid Lines',...
'Position',[N-150,M/2-25 150 50]);
set(handles.check,'Callback',{@checkbox_callback,handles});
function checkbox_callback(gcf,event_data,handles)
handles
val=get(handles.check,'Value');
if val
grid on;
else
grid off;
end
处理报告:
handles =
fig: 3
axes: 488.0044
check: 489.0044
答案 0 :(得分:1)
只有handles
的副本被传递到回调中。所以在
handles.check=uicontrol('style','checkbox',...
'string','Enable Axes Grid Lines',...
'Position',[N-150,M/2-25 150 50],...
'Callback',{@checkbox_callback,handles});
handles
,作为checkbox_callback
的参数传递,只设置axes
和fig
字段,因为代码仅在创建过程中check
字段。
而在
set(handles.check,'Callback',{@checkbox_callback,handles});
handles
(或其副本)已根据之前的三个陈述设置了fig
,axes
和check
字段。
修改强>
我总是使用GUIDE创建我的GUI,然后依靠guidata
函数来获取和设置handles
结构中的字段。在您的示例中,您可能需要使用guidata
或使用setappdata
和getappdata
函数执行类似的操作。有关详细信息,请参阅Share Data Amongst Callbacks。