【问题标题】:MATLAB GUI error Reference to non-existent field '---'MATLAB GUI 错误引用不存在的字段 '---'
【发布时间】:2015-02-17 08:14:45
【问题描述】:

我有两个编辑文本框。我想在用户单击另一个地方而不是这些编辑文本框时立即给出错误消息。我收到消息

引用不存在的字段“eth_xegim”。

其实我在这两个之前有几个edittext box。当我打印S 时,我可以看到字段名被打印到xegim 但不是xegim

S.fh = figure('Visible','on','numbertitle','off','Name','GUI',...
    'units','pixels','Position',[50 50 1500 750]);
% Panel start
S.ph_arazi = uipanel('Parent',S.fh,'Title','Arazi','TitlePosition','centertop',...
    'units','pixels','Position',[1180 364 300 244]);

S.sth_xegim = uicontrol(S.ph_arazi,'Style','text','String','x Eksenine gore egim [%]','HorizontalAlignment','left','Position',[10 68 130 18]);
% xegim edittext
S.eth_xegim = uicontrol(S.ph_arazi,'Style','edit','String','0',...
    'HorizontalAlignment','right','BackgroundColor','w',...
    'Position',[250 68 40 18],'callback',{@errmsg,S});

S.sth_yegim = uicontrol(S.ph_arazi,'Style','text',...
    'String','y Eksenine gore egim [%]','HorizontalAlignment','left',...
    'Position',[10 40 130 18]);
% xegim edittext
S.eth_yegim = uicontrol(S.ph_arazi,'Style','edit',...
    'String','0','HorizontalAlignment','right',...
    'BackgroundColor','w','Position',[250 40 40 18],...
    'callback',{@errmsg,S});
% error message
function [] = errmsg(varargin)
S = varargin{3} 

xegim = get(S.eth_xegim,'String');
xegim = xegim(ismember(xegim,'.:0123456789'));
yegim = get(S.eth_yegim,'String');
yegim = yegim(ismember(yegim,'.:0123456789'));
if isempty(xegim) || isempty(yegim)
    if length(S.fh)==1
        S.fh(2) = figure('numbertitle','off','Name','Error',...
            'menubar','none','units','pixels',...
            'Position',[700 400 200 100]);

        S.sth_error = uicontrol(S.fh(2),'Style','text',...
            'String','Girdiler sayi olmali!','Min',0,'Max',2,...
            'BackgroundColor','r','Position',[10 10 180 80]);
        ag = findobj; 
        nf = max(ag(find(ag==fix(ag))));
        if nf == 2
        close(S.fh(2))
        end
        S.fh(2) = [];
    end
    return;
end

【问题讨论】:

  • 好吧,除了标题和文字完全无关,我用debugger对这个脚本进行了一些非常简单的调试。结果是我发现了一个导致你崩溃的错字。我将此作为评论,因为 a)标题与问题无关 2)错误消息不会出现在您所说的位置 3)帖子中没有问题。这意味着我不知道要回答什么,所以我请求你对格式的原谅。 S = fh: [1x1 Figure], ph_arazi: [1x1 Panel], sth_xegim: [1x1 UIControl].

标签: matlab user-interface char integer


【解决方案1】:

在您将 S 作为附加输入参数添加到回调时,S 不包含字段 eth_xegimeth_yegim,因为它们尚未添加到结构中。添加字段后定义回调:

S.eth_xegim = uicontrol(S.ph_arazi,'Style','edit','String','0',...
    'HorizontalAlignment','right','BackgroundColor','w',...
    'Position',[250 68 40 18]);

S.eth_yegim = uicontrol(S.ph_arazi,'Style','edit',...
    'String','0','HorizontalAlignment','right',...
    'BackgroundColor','w','Position',[250 40 40 18]);


S.eth_xegim.Callback = {@errmsg,S};
S.eth_yegim.Callback = {@errmsg,S};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 2012-12-26
    相关资源
    最近更新 更多