Hye guyz。我需要帮助。我有一张桌子的数字。用户将数据插入表中。如果用户突然错误插入数据,表格将为'NaN'。我的问题是我想如何使表不在表上显示'NaN',但我想要出现一条错误消息。我有这个编码:
function Mytable1_CreateFcn(hObject, eventdata, handles)
if isnan(Mytable1)
set(hObject, 'Data', 0);
errordlg('Input must be a number','Error');
end
handles.Mytable2 = hObject;
guidata(hObject,handles);
但是这段代码有错误。这个编码是否正确回答我的问题?
我在Mytable1_CellEditCallback上进行了编码。它仍然有错误。这段代码是真的吗?
Mytable1=get(hObject,'Data')
if isnan(Mytable1)
set(hObject, 'Data', 0);
h=errordlg('Oh noes!','Error');
set(h, 'WindowStyle', 'modal');
uiwait(h);
return
end
handles.Mytable2 = hObject;
guidata(hObject,handles);
这是错误:
Mytable1 =
[1] [] []
[] [] []
[] [] []
[] [] []
???未定义的函数或方法'isnan'用于'cell'类型的输入参数。
==>中的错误fyp_editor> Mytable1_CellEditCallback at 795 if~isnan(Mytable1)
==>中的错误gui_mainfcn at 96 feval(varargin {:});
==>中的错误fyp_editor在42岁 gui_mainfcn(gui_State,varargin {:});
==>中的错误 @(hObject,EVENTDATA)fyp_editor( 'Mytable1_CellEditCallback',hObject,EVENTDATA,guidata(hObject))
???评估uitable CellEditCallback
时出错答案 0 :(得分:1)
此代码中存在多个错误。让我数一下。
function Mytable1_CreateFcn(hObject, eventdata, handles)
创建函数在对象创建时执行,即在构建GUI时执行。它永远不会以其他方式执行,因此它是您很少想要修改的功能。您要修改的内容是Mytable1_Callback
if isnan(Mytable1)
Mytable1
尚未在函数中定义。因此,这一行会给你一个错误。也许你打算添加一行Mytable1=get(hObject,'Data')
?此外,由于Mytable1
是一个单元格数组,因此您必须使用cellfun
检查NaN的元素,即写if any(cellfun(@isnan,Mytable1(:)))
。
set(hObject, 'Data', 0);
这条线很可能很好。
errordlg('Input must be a number','Error');
虽然此行不是错误,但它不会按预期运行 - 弹出消息,但该函数继续执行。您应该写error('input must be a number)
,或写h=errordlg('Oh noes!');uiwait(h);return
end
看,另一条线路没问题!
handles.Mytable2 = hObject; guidata(hObject,handles);
使用此方法,您可以使用Mytable2
的句柄覆盖Mytable1
的句柄。这真的是你想要的吗?
答案 1 :(得分:1)
if isnan(Mytable1)
Mytable是一个单元格数组。试试这个:
if any(isnan(cell2mat(Mytable1)))
但是,migth是一种更简单的方法,Cell编辑回调有两个输入:调用Object和eventdata(以及指南中的句柄)。在eventdata中有以下字段:
索引:1 x 2数组,包含用户编辑的单元格的行索引和列索引。
PreviousData:以前的单元格数据。默认值为空矩阵,[]。
EditData:用户输入的字符串。
NewData:MATLAB写入Data属性数组的值。它与EditData或转换后的值相同。 如果MATLAB在用户输入的数据中检测到错误,则NewData属性为空。
错误:如果MATLAB在用户输入的数据中检测到错误,则会返回错误消息。 当MATLAB成功将值写入Data属性时,Error属性为空。 如果Error属性不为空,则CellEditCallback可以显示字符串,或者它可以尝试解决问题。
来源:http://ch.mathworks.com/help/matlab/ref/uitable-properties.html#zmw57dd0e748724
使用NewData或Error时,应该可以处理错误检查。
例如:
MyTable_CellEditCallback(hObj,event,handles)
if isempty(event.NewData)
h=errordlg('Oh noes!','Error');
set(h, 'WindowStyle', 'modal');
uiwait(h);
return
end
% The rest of the function
end