for i:=0 to componentcount-1 to 
                if components[i] is tshape then                begin
                    tshape(components[i]).free;
                    application.processMessage;  //试试
                 end

解决方案 »

  1.   

    老大!!!!!!
    怎么搞的!!!
    你从0开始销毁,一直到Count-1,好像可以,其实不然呀!!!
    假设总共有3个,当你销毁第一个(下标为0)的时候,此时Count其实已经变化为2,
    然后下一个循环的时候,访问的是Components[1],此时1已经是最后一个了,
    再下一个循环的时候,访问的是Components[2],此时Count=1,请问,能不出错吗?解决办法:
    // 采用 For i DownTo ..
      for i := ComponentCount - 1 downto 0 do
      begin
        if  Components[i] is Shape then
        begin
          // Do  Free
          //. ...
        end;
      end;
     
      

  2.   

       对对对,你从0开始销毁,一直到Count-1,好像可以,其实不然呀!!!
    假设总共有3个,当你销毁第一个(下标为0)的时候,此时Count其实已经变化为2,