补充一点:
 创建时,
scrollbox1的parent:=panel3;
其余的控件parent:=scrollbox1;

解决方案 »

  1.   

    从代码上看应该没有什么问题,不过如果你的scrollbox是知道名字的,何必再用
    if (panel3.Controls[i] is tscrollbox) then进行判断呢?另外,“如果我把创建的控件保存成文件,从文件里面读取控件信息并显示”就没有错,那可能是你在创建的时候出了问题而自己不知道。建议你对free部分的代码进行断点测试就可以知道是那个地方出问题了
      

  2.   

    创建时,如果owner参数是TScrollbox,那么直接free Scrollbox就可以了。Delphi会替你做剩下的事情。
      

  3.   

    for i := panel3.ControlCount - 1 downto 0 do
            if (panel3.Controls[i] is tscrollbox) then
            begin
              comp := panel3.Controls[i];
              for j := componentCount - 1 downto 0 do
                if (components[j].GetParentComponent = comp) then
                begin
                  components[j].Free;
                end;
              comp.free;
            end;
    ------------------------------------
    看了看,感觉好像对,不过,如果你不要用双层for ,一层一层,应该不会有错
      

  4.   

    chechy(我爱洁洁) :我用:
      if scrollbox1 is tscrollbox then
      begin
        scrollbox1.Free;
        scrollbox1 := nil;
      end;这个也不行。同样报错。
    access violation at address 00402fe8 in module "project1.exe".
      

  5.   

    解决了。原因是我在创建scrollbox1时,画蛇添足,用了panel3.insertcontrol(scrollbox1),我把这句话删除就好了,谢谢各位。