在一个mdi系统中,关闭一个子窗口,在onclose事件中添加 free;可以正常释放窗体,但是在窗体中加入一个button,事件中添加上free;或者是close都会出错。这是为什么?

解决方案 »

  1.   

    在FormClose中加:
    Action := caFree ;
      

  2.   

    在FormClose中加:  Action := caFree ;
    如果不行,可能需要指定要关闭的对象,试试这样写:  FormChild.close;
      

  3.   

    如果你的按钮在子窗体上那么他的click事件不能包含窗体的free....如果你的按钮在MDImain窗体上那么请帖出你的代码
      

  4.   

    看来你对Free方法理解不够透彻。
      1、所有从TComponent继承下来的组件因为都有Owner,Owner负责释放这些组件的内存,所以无论动态创建还是静态Drag drop在form上的控件、组件都没必要Free!!!除非你用 组件.Create(nil)方式创建的。
      2、任何窗体都不可以直接调用Free方法的,这是窗体和普通组件不同之处,因为窗体还需要处理窗体事件循环,所以应该有必要时用Release方法来发出“我已经关闭了”消息给windows代替free来等待窗口事件结束。
      3、不要直接写free,可以在CloseQuery事件里写Action:= caFree;
      

  5.   

    在FormClose中加:
    Action := caFree ;
    form2:=nil