var
   lab:TLabel;
begin
   lab:=tlabel.create(Self);
   lab.parent:=form1;
   lab.Name:='lab1';
   lab.caption:='aaaaaaaaaaa';   lab:=tlabel.create(Self);
   lab.parent:=form1;
   lab.Name:='lab2';
   lab.caption:='bbbbbb';
end;
点击按钮如何把生成的两个label删除?

解决方案 »

  1.   

    一般情况是自己搞个列表把他们存起来,然后按要求Free
    当然你也可以FindComponent('lab1').Free;但前提是你这样lab:=tlabel.create(Self);创建的
      

  2.   

    一般用free 释放,也可能隐藏起来 visable:=true 关闭程序会自动释放。
      

  3.   

    uses Contnrs;var
      FList: TComponentList;var
       lab:TLabel;
    begin
       lab:=tlabel.create(Self);
       lab.parent:=Self;
       lab.Name:='lab1';
       lab.caption:='aaaaaaaaaaa';
       FList.Add(lab);   lab:=tlabel.create(Self);
       lab.parent:=Self;
       lab.Name:='lab2';
       lab.caption:='bbbbbb';
       FList.Add(lab);
    end;
      

  4.   

    在Form定义一个成员List: TList;在Form创建时List := TList.Create;然后创建一个TLabel就加到List中:
    var 
       lab:TLabel; 
    begin 
       lab:=tlabel.create(Self); 
       lab.parent:=form1; 
       lab.Name:='lab1'; 
       lab.caption:='aaaaaaaaaaa'; 
       List.Add(lab);   lab:=tlabel.create(Self); 
       lab.parent:=form1; 
       lab.Name:='lab2'; 
       lab.caption:='bbbbbb'; 
       List.Add(lab);
    end; 
    点击时就释放:
    var
      i: Integer;
    begin
      for i := List.Count - 1 downto 0 do
      begin
        TLabel(List[i]).Free;
        List.Delete(i);
      end;
    end;最后在Form.OnDestroy事件中释放List.Free;
      

  5.   

    其实
    FindComponent('lab1').Free也可以,也许找的速度可能会慢点,但是影响不大
      

  6.   

      for iIndex := 0 to Self.ComponentCount - 1 do
      begin
        if Self.Components[iIndex] is TLabel then
          (Self.Components[iIndex] as tLabel).Destroy;
      end;