试试在Form.OnShow里创建
if img[i]=nil then img[i].Create(self);
释放时if img[i]<>nil then img[i].Free;

解决方案 »

  1.   

    先释放 lab
    再释放 img
      

  2.   

    创建组件要放在Create事件里
    例外释放一个对象最好判断一下是否为Nil,释放时除了调用Free方法外,最好赋值为Nil。

       if ComponentCreate <> nil then begin
         ComponentCreate.Free
         ComponentCreate := nil;
       end;
      

  3.   

    不会回答,只想发表看法
    解决问题应当把真正原因找到,从出错原因到解决办法都能够解释圆满。我不大赞同whhehai的解决办法,属于涂抹是消除,这样隐患并没有根除。
      

  4.   

       img[i]:=tImage.Create[self];
       lab[i]:=TLabel.create[self];
       lab[i].Parent:=Self;  //加上再试试
      

  5.   

    img[i]:= Timg[i].Create(nil);
       with img[i] do
       begin
         Free;
       end;
      

  6.   

    if assigned(Tobject) then
      Tobject.free;
      

  7.   

    先释放 lab
    再释放 img
    似乎不是个好主意,我试了,出错频率更高了,
    先释放 img
    再释放 lab
    平均点击7次出一次错,现在改为:
    先释放 lab
    再释放 img
    平均点击1次出一次错了,赫赫,没办法。
      

  8.   

    行了就给分,如果owner 是form,为什么close时要free它的儿子,不是拿delphi捣乱吗?给分行吗!
      

  9.   

    to scripting(scripting):
       问题是我每次进入这个窗体时,img和lab的数目是根据不同的情况改变的,所以不得不free,我真的不是捣乱,谢谢
      

  10.   

    只要你离开时close就不用free,如果没有close 就不对
      

  11.   

    创建image和label都要放在窗体的OnCreate事件中,
    在你的窗体的OnClose事件中释放它们并加上Action := caFree彻底释放窗体,
    每次想进入此窗体时都要重新创建此窗体。
      

  12.   

    img[i].free;
    img[i].nil
    lab[i].free
    lab[i].nil