不知谁遇到过这样的问题:
我动态创建了一批控件,有标签、文本框、下拉框等等,在释放的时候,如果所有控件都看得到,那就不会出问题,但是当还有一些控件在滚动条以下的时候,释放就出错了。如果把面板宽度调宽点,让所有动态创建的控件都能够看得到,一切都正常,不知是何原因?还望高人指教!~~~~

解决方案 »

  1.   

    动态创建VCL组件时指定了Owner,就不必担心释放的问题。可以由Owner来负责。
      

  2.   

    楼上的方法应该可行,我说下可能的产生原因,看不到的组件其实没有Show的过程,估计创建方面就有些问题(至少不完整),相应的释放的时候也会有些问题。
    另外提示搂主,动态创建的对象都应该有手工释放的代码,这样才是安全的代码。
      

  3.   

    对 指定Owner应该就可以了~~ 换个角度 你动态创建的时候 把他的范围不超过面板宽度撒
      

  4.   

    个人习惯不一样,我习惯Owner为nil, 我自己掌握生命周期。
      

  5.   

    Owner是只读属性,怎么设置? 
        MySEdit := TEdit.Create(KJPan); //KJPan为一面板控件
        MySEdit.Parent := KJPan;
        MySEdit.Tag := KJID;
        MySEdit.TabOrder := KJID;
        MySEdit.Name := 'SEdit_' + IntToStr(KJID);
        MySEdit.MaxLength := ZJLength[KJID];
        MySEdit.Text := '';
        MySEdit.Height := 20;
        MySEdit.Width := 160;
        MySEdit.OnClick := EditClick;
        MySEdit.OnChange := EditChenClick;
        
    我把事件屏掉也一样出错。
      

  6.   

    访问不可用的地址00489D20,怪就怪在我把ScrollBox 拖宽,将所有控件显示出来就不出问题了,郁闷!~
      

  7.   

    MySEdit.Name := 'SEdit_' + IntToStr(KJID);
    看到有这句,感觉,动态创建的组件,应该用个组件数组或者什么数据结构存储吧,没有必要给组件起名字了,组件名就是MySEdit,没有必要修改Name属性了。