如何在gui中显示错误消息?

时间:2011-02-17 04:24:52

标签: arrays user-interface matlab

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

时出错

2 个答案:

答案 0 :(得分:1)

此代码中存在多个错误。让我数一下。

  1. function Mytable1_CreateFcn(hObject, eventdata, handles)

    创建函数在对象创建时执行,即在构建GUI时执行。它永远不会以其他方式执行,因此它是您很少想要修改的功能。您要修改的内容是Mytable1_Callback

  2. if isnan(Mytable1)

    Mytable1尚未在函数中定义。因此,这一行会给你一个错误。也许你打算添加一行Mytable1=get(hObject,'Data')?此外,由于Mytable1是一个单元格数组,因此您必须使用cellfun检查NaN的元素,即写if any(cellfun(@isnan,Mytable1(:)))

  3. set(hObject, 'Data', 0);

    这条线很可能很好。

  4. errordlg('Input must be a number','Error');

    虽然此行不是错误,但它不会按预期运行 - 弹出消息,但该函数继续执行。您应该写error('input must be a number),或写h=errordlg('Oh noes!');uiwait(h);return

  5. end

    看,另一条线路没问题!

  6. 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