如题

解决方案 »

  1.   

    你的控件创建的时候都有一个owner属性,每个控件的owner对它的创建和释放负责。(注意owner和parent的区别)毫无疑问,你的窗体上的控件的parent,或parent.parent...parent一定是这个窗体,但owner就不一定了,这是由你创建控件的时候指定的。
    也就是说,如果你动态创建的窗体上的控件的owner不是这个窗体,那么在窗体被free的时候,他不一定会被自动释放。例如,myLabel:=TLabel.Create(Application);myLabel.parent:=Form2;
    创建一个owner是Application的Label,那么他在程序结束的时候才会被释放。
      

  2.   

    oracle_lover(数据库情人)
    说的非常精彩!
      

  3.   

    同意oracle_lover(数据库情人) 
    有问题请发信息到我的E-mail:[email protected]
      

  4.   

    YES
    窗体上的构件的parent是窗体。
      

  5.   

    你看到没有比如TFORM里面有一个COMPONENTS的数组,
    在他DESTORY的时候
    就 FOR I:=0 TO COMPONENTS.COUNT-1 do
          COMPONENTS.FEEE 
        是自动的,
    但是如果一个COMPONENT是自己生成的,并且create()里面没有参数FORM1,这时候FORM1.components里面没有它的引用,所以没有自动FREE,那么就要自己FREE掉不然就会有内存泄露,很简单如果CREATE函数里有AOWNER的就由AOWNER在他DESTORY的时候FREE,如果没有的你就要手动FREE
     比如:
      var
      kk:tbutton;
      begin
       KK:=TBUTTON.CREATE;
       KK.PARENT:=FORM1;
       KK.LEFT:=1 ;
      //DOSOMETHING
       KK.FREE;  
      END;
     
      

  6.   

    FOR I:=0 TO COMPONENTS.COUNT-1 do
          COMPONENTS[i].FEEE //笔误
      

  7.   

    oracle_lover(数据库情人)讲的好!
      

  8.   

    同意oracle_lover(数据库情人)的看法!