在MATLAB中,我正在从excel文件中导出一个名单列表' list.xls'进入一个变量' Columns',这样这个列表就会显示在弹出式菜单中。弹出菜单' popUp1'和' popUp2'带把手。问题是列表只显示在popUp1中,我收到popUp2的错误。我的代码如下:
function popUp1_CreateFcn(hObject, eventdata, handles)
handles = guidata(hObject);
[~,Columns]=xlsread('list.xls'); %get the list
set(hObject,'String',Columns); %set(display) list on popUp1 menu
handles.columns=Columns;
handles=guidata(hObject);
guidata(hObject,handles);
if ispc && Isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function popUp2_CreateFcn(hObject, eventdata, handles)
Columns=get(handles.columns,'String'); %gets the list from handles
set(hObject,'String',Columns); %set(display) the list on popUp2 menu
if ispc && isequal(get(hObject,'BackgroundColor'), set(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
当我使用' Columns = get(handles.columns,' String');'在Callback函数中,错误不会显示,但仍然是popUp2为空。
老实说,我对整个'处理器非常困惑。事情,所以对他们如何工作的任何解释都将受到高度赞赏。
感谢您的建议!
答案 0 :(得分:0)
我现在无法测试它,但我认为你应该删除popU1_CreateFcn中handles=guidata(hObject);
的两个实例。这部分代码加载与hObject关联的handle变量。在第一行中没有必要,因为句柄已经是函数的参数。在第二个实例中,它实际上是有害的,因为它否定了行handles.columns=Columns
,因为句柄被重置为调用popU1_CreateFcn之前的状态。
仔细查看文档http://www.mathworks.de/de/help/matlab/ref/guidata.html:
To change the data managed by guidata:
1) Get a copy of the data with the command data = guidata(object_handle).
2) Make the desired changes to data.
3) Save the changed version of data with the command guidata(object_handle,data).