unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    FlowPanel1: TFlowPanel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
    i : Integer;
    btn : TButton;
begin
    for I := 0 to 5 do
      begin
        btn := TButton.Create(nil);
        btn.Name := 'btn' ;
        btn.Parent := self.FlowPanel1;
      end;
end;procedure TForm1.Button2Click(Sender: TObject);
var
    i : Integer;
begin
    for i := 0 to FlowPanel1.ControlCount - 1 do
    begin
        FlowPanel1.Controls[i].Free;
    end;
end;end.删除时会提示错误,请问有那们知道怎样删除动态控件/

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject); 
    var 
        i : Integer; 
        btn : TButton; 
    begin 
        for I := 0 to 5 do 
          begin 
            btn := TButton.Create(nil); 
            btn.Name := 'btn'+inttostr(i) ;//每个按钮的名字最好不要一样 
            btn.Parent := self.FlowPanel1; 
          end; 
    end; procedure TForm1.Button2Click(Sender: TObject); 
    var 
        i : Integer; 
    begin 
        for i := 0 to FlowPanel1.ControlCount - 1 do 
        begin 
            if FlowPanel1.Controls[i] is TButton then
               (FlowPanel1.Controls[i] as TButton).Free; 
        end; 
    end; 
      

  2.   

    又忘了一个原则性的错误,应该用downto
    for i :=FlowPanel1.ControlCount - 1 downto 0 do 
        begin 
            if FlowPanel1.Controls[i] is TButton then 
              (FlowPanel1.Controls[i] as TButton).Free; 
        end; 
      

  3.   

    你的代码原封不懂,直接把to改成downto就可以了,不过你的代码有问题,例如创建时,没有指定每个按钮的位置,名称一样等
      

  4.   

    还是会出错,提示:list index out of bounds(3),不知道为什么.
    用下面的方法还是 提示一样的错误.
    procedure TForm1.Button1Click(Sender: TObject);
    var
        i : Integer;
        btn : TButton;
    begin
        for I := 0 to 5 do
          begin
            btn := TButton.Create(self);
            btn.Name := 'btn' + intToStr(i);
            btn.Parent := self.FlowPanel1;
          end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
        i : Integer;
    begin
        for i := 0 to FlowPanel1.ControlCount - 1 do
        begin
           if FlowPanel1.Controls[i] is TButton then
              (FlowPanel1.Controls[i] as TButton).Free;
        end;
    end;
      

  5.   

    3楼的不是已经告诉你要倒着来吗?怎么还这样写?    for i := 0 to FlowPanel1.ControlCount - 1 do 修改成:
      for i:= FlowPanel1.ControlCount - 1 downto 0 do
      //....
      

  6.   

    procedure TForm1.Button1Click(Sender: TObject); 
    var 
        i : Integer; 
        btn : TButton; 
    begin 
        for I := 0 to 5 do 
          begin 
            btn := TButton.Create(nil); 
            btn.Name := 'btn' ; 
            btn.Parent := self.FlowPanel1; 
          end; 
    end; procedure TForm1.Button2Click(Sender: TObject); 
    begin 
        While FlowPanel1.Controls.count>0 do
          FlowPanel1.Contorls[0].free;
    end; 
      

  7.   

    btn.Name := 'btn' 这个去掉~