我想做的是把Form上的Image控件全部删除。代码如下:
procedure TForm1.Button2Click(Sender: TObject);
var
  i:integer;
begin
for i:=0 to Form1.ControlCount-1 do
  begin
    if copy(Form1.Controls[i].Name,1,5)='Image' then
      (Form1.Controls[i] as TImage).Free;
  end;
end;但是出现List index out of bounds(5)错误,我好象没有什么出界啊???为什么呢?

解决方案 »

  1.   

    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      i: Integer;
    begin
        for i := 0 to ControlCount - 1 do
        if Controls[i] is TImage then
        TImage(Self.Controls[i]).Create(nil);
    end;
      

  2.   

    procedure TForm1.BitBtn2Click(Sender: TObject);
    var
      i:integer;
    begin
    for i:=0 to Form1.ControlCount-1 do
      begin
        if copy(Form1.Controls[i].Name,1,5)='Image' then
        (Form1.Controls[i] as TImage).Hide;  //隐藏掉也行,呵
      end;
    end;
      

  3.   

    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      i: Integer;
    begin
        for i := 0 to ControlCount - 1 do
        if Controls[i] is TImage then
        TImage(Self.Controls[i]).Free;
    end;
      

  4.   

    我想要的是把它删除,就是Free。因为我在程序运行中会创建很多image。
    zzlingaaa(小舟) 的方法就是出现我提问的错误。各位想想有什么好的方法。多谢!
      

  5.   

    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      i: Integer;
    begin
        for i :=ControlCount - 1  downto 0 do
        if Controls[i] is TImage then
        TImage(Self.Controls[i]).Free;
    end;
    这样就不会错了
      

  6.   

    var
      i: Integer;
    begin
        for i := ControlCount - 1 downto 0 do
        if Controls[i] is TImage then
        TImage(Controls[i]).Free;
    end;
    我试了一下,通过啊...
      

  7.   

    看看Controls[i]是个什么东西吧,呵呵
      

  8.   

    比如你窗体上只有5个Image控件,controls[0]到controls[4]都存在,当你free掉了三个之后就只剩两个了,你还继续的话Controls[i]已经不存在了,当然出错了。
      

  9.   

    难道controls[0]就是一个控件,controls[2]就是三个控件?
    不是象数组一样的吗?不都是一个控件吗?