问题描述 :
    我的delphi系统 ,其mdi了窗口上有一个<退出> 按钮 ,按该按钮后,执行
free ; 但每次都出现以下例外提示 :project Appkjyw.exe raised exception class EAccessViclation with message 'Access violation at address 004488EF in module 'Appkjyw.exe' ,Read of address 0003c000 ,
Process stopped ,use step or Run to continue ..不知何故 ,如果把free ,换成close ,则该mdi 子窗口不会关闭 ,只是最小化于mdi主窗口的左下角..请高手帮忙分析分析啊........
也请讲解一个free 与 close 的区别........
跟贴者有分

解决方案 »

  1.   

    如果你要关闭子窗口,只要在子窗口的关闭事件(onCloseQuery or onClose)中设置那个函数参数action:=caFree,就可以了
      

  2.   

    procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    Action:=caFree;
    end;procedure TForm2.FormDestroy(Sender: TObject);
    begin
    Form2:=nil;
    end;
      

  3.   

    关闭子窗体,假设你的字窗体名字为 fmmdi,主窗体为mainform在form的onclose事件中MainForm.fmmdi:=nil;
    action:=caFree;////////////主窗体打开fmmdi的代码:
    if fmmdi = nil then
    fmmdi := Tfmmdi.Create(self);而且在主窗体里面的
    public
    加上
    Tfmmdi:Tform;/////////////////////
      

  4.   

    return above :
    多谢高手们回复,
    通过Action:=caFree; 可以解决, 但不明白原因 ,为何用free会出错呢.还请讲解一个原因.......
      

  5.   

    close应该就是简单的关闭,在内存中还保存着,free就是关闭后内存中也释放掉,
    子窗体的关闭按钮默认是最小化,所以你要设置action的值