在for循环中创建句柄

时间:2014-01-28 00:20:41

标签: matlab user-interface

我正在创建一个包含大量复选框的GUI

h.f = figure('units','pixels','position',[200,200,150,50],...
             'toolbar','none','menu','none');
for i=1:100
    num_data=round((100*(5*rand()))/100);    
end
h.t(i) = uicontrol('style','text','units','pixels',...
            'position',[30,820-15.*i,150,15],'string','za');

h.c.a(i) = uicontrol('style','checkbox','units','pixels',...
            'position',[150,820-15.*i,125,15],'string','1');

if num_data>1            
    h.c.b(i) = uicontrol('style','checkbox','units','pixels',...
            'position',[175,820-15.*i,25,15],'string','2');  

end
if num_data>2
    h.c.c(i) = uicontrol('style','checkbox','units','pixels',...
            'position',[200,820-15.*i,25,15],'string','3');

end
if num_data>3
    h.c.d(i) = uicontrol('style','checkbox','units','pixels',...
            'position',[225,820-15.*i,25,15],'string','4');

end
if num_data>4
    h.c.e(i) = uicontrol('style','checkbox','units','pixels',...
            'position',[250,820-15.*i,25,15],'string','5');

end



h.p = uicontrol('style','pushbutton','units','pixels',...
                'position',[40,5,70,20],'string','OK',...
                'callback',@p_call);
    % Pushbutton callback
    function p_call(varargin)
        vals=get(h.c, 'Value');
        checked = find([vals{:}]);
        if isempty(checked)
            checked = 'none';
            disp(checked)
        else
            for i=checked
            Data1=dlmread(strcat(files{i}, ' PYRO.txt'),2,0);
            plot(Data1(3:end,1),Data1(3:end,2))
            hold on
            end
        end
    hold off

代码将复选框放在正确的位置,但是h在for循环结束时消失了,这就是我得到的错误。

??? Undefined variable "h" or class "h.c".

Error in ==> checkboxesGUI>p_call at 50
        vals=get(h.c, 'Value');

??? Error while evaluating uicontrol Callback

如何制作,以便我可以回电话?

1 个答案:

答案 0 :(得分:1)

该错误表示p_call无法访问存储句柄的结构h。您的整个代码未发布,但很明显p_call未嵌套在拥有h的函数中。重新构建代码,以便p_call可以访问h,或在每次调用时将h作为输入参数传递。

另外,问题是h.c是结构,而不是句柄。您的句柄位于h.c的子字段中(即h.c.ah.c.b等)。这有点乱,所以我建议更改代码,这样你就可以通过h.c(i)保持数组中的复选框句柄,这样你的getfind行就可以了。