各位XDJM
   我动态添加了一些Panel,请问如何释放掉?Function CreatePanelEX( aOwner:TPanel;Item_caption :string;Pnl : TPanel;SetMenu :TPopupMenu;i:integer) :TPanel;
begin
   Result   :=   TPanel.Create(aOwner);
   result.parent:=PNL;
   result.left:=55;
   result.top:=20;
   result.MouseDownDrag :=true;
   result.caption:=Item_caption;
   result.PopupMenu := SetMenu;
   result.Name :='Label_item'+inttostr(i);
end;
//通过点击Button添加Panel
procedure TForm1.Btn_additemClick(Sender: TObject);
begin
 Item_Add := EDT_ItemAdd.Text ;
 MyLabelPnllist:=CreatePanelEX(MyLabelPnl,Item_Add,PNL_Format,setmenu,Count)  ;
 Count:=Count+1;
 label3.Caption :=MyLabelPnllist.Name;
end;

解决方案 »

  1.   

    把创建好的TPanel放到一个列表里,在窗体的OnDestroy事件里作个循环释放列表里的TPanel就可以了。
    type
      TForm1 = class(TForm)
      private
        PnList: TList;
      end;procedure TForm1.Form1Create(Sender: TObject);
    begin
      PnList := TList.Create;
    end;procedure TForm1.Form1Destroy(Sender: TObject);
    var
      i: integer;
    begin
      for i := 0 to PnList.Count - 1 do
      begin
        TPanel(PnList[i]).Free;  
      end;
      PnList.Free;
    end;procedure TForm1.Btn_RemoveAllClick(Sender: TObject); 
    var
      i: integer;
    begin
      for i := 0 to PnList.Count - 1 do
      begin
        TPanel(PnList[i]).Free;  
      end;
      PnList.Clear;
    end;procedure TForm1.Btn_additemClick(Sender: TObject); 
    begin 
     Item_Add := EDT_ItemAdd.Text ; 
     MyLabelPnllist:=CreatePanelEX(MyLabelPnl,Item_Add,PNL_Format,setmenu,Count)  ; 
     pnList.Add(MyLabelPnllist);////加到List里
     Count:=Count+1; 
     label3.Caption :=MyLabelPnllist.Name; 
    end;
    //都是随手的代码,可能有问题,你改改就可以了
      

  2.   

    SendMessage(PNL_Format.Handle, CM_RELEASE, 0, 0);
      

  3.   

    呵呵,blazingfire 的方法不错,学习了。全部循环释放掉了,如果是指定释放某一COMPONENT的话,我也写了如下CODE,可以指定释放某一COMPONENTvar
      Form1: TForm1;
      count:integer=0;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var mypanel:Tpanel;
    begin
      Mypanel:=Tpanel.create(self);
      Mypanel.parent:=form1;
      count:=count+10;
      Mypanel.Left:=count+10;
      Mypanel.Top:=count;
      Mypanel.caption:=format('panel%d',[count]);
      Pnlist.Add(mypanel);////加到List里end;procedure TForm1.FormCreate(Sender: TObject);
    begin
     Pnlist:=Tlist.create;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    var 
      i: integer;
    begin
      for i := 0 to pnlist.Count - 1 do    
      begin
        TPanel(Pnlist[i]).Free;
      end;
      Pnlist.Free;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var i: integer;
    begin
        i:=StrToInt(Edit1.Text);  //在窗体上添加EDIT控件
        TPanel(Pnlist[i]).Free;   //指定第几个需要释放
    end;end.如果有更好的指定控件的方法,继续学习
      

  4.   

    如果不用TList,用FindComponent()获取也可以