我创建了N个组件,请问怎么传说动态创建的组件呢,我动态创建代码如下//创建动态组件
procedure GetXYRPos(Ppos:string;x,y:Integer;r:Boolean);
var
 abool : Boolean;
begin
 Setlength(aPanel,Getzuihouyihang(Main.StringGrid1));
 aPanel[ii] := TPanel.Create(nil);
 aPanel[ii].Name := 'a'+Ppos;
 if r then begin
  aPanel[ii].Width := 20;
  aPanel[ii].Height := 10;
  aPanel[ii].Left := x-10;
  aPanel[ii].Top := y-4;
  end else begin
  aPanel[ii].Width := 10;
  aPanel[ii].Height := 20;
  aPanel[ii].Left := x-4;
  aPanel[ii].Top := y-10;
 end;
 aPanel[ii].Caption := '  ';
 aPanel[ii].Color := clLime;
 aPanel[ii].Hint := Ppos;
 aPanel[ii].ShowHint := True;
 aPanel[ii].AutoSize := False;
 aPanel[ii].Ctl3D := True;
 //aPanel.OnMouseMove := moveposcursor;
 aPanel[ii].Parent := Main.Image1.Parent;
 PosAstr := Ppos;
 aPanel[ii].OnDblClick := Main.xxoo;
 aPanel[ii].Show;
end;
请问删除怎么删除。

解决方案 »

  1.   

    aPanel[ii].free;  只能删除我最后一个建立的组件啊
      

  2.   

    循环一下aPanel不就行了?
    for i := 0 to High(aPanel) do apanel[i].Free;
      

  3.   

    for i:=low(aPanel) to high(aPanel) do
    if aPanel[i]<>nil then
    aPanel[i].free;
      

  4.   

     aPanel[ii] := TPanel.Create(nil);
    如果两次运行时,ii为同一值,那么就覆盖掉一个指针了,当然就删除不完了
    检查其他地方,如果还是有问题,可以考虑从释放父容器来释放所有子对象,
     aPanel[ii] := TPanel.Create(aHideComponent);
    想释放时,只需要释放aHideComponent即可
      

  5.   

    找到指针直接 free 就行了, 你不要说你 
     aPanel[0] 
     aPanel[1]  aPanel[ii] 
    的指针都是同一个??