‘MDIChildren[i].Close;’改成‘MDIChildren[i].Action := caFree;’试试
另:可以用showMessage函数输入MDIChildCount的值看看。

解决方案 »

  1.   

    1、MainForm.OnClose事件中不能再写MainForm.Close,如果能执行的话,一定是死循环。
    2、在MainForm.OnClose事件中关闭所有子窗口是多此一举,主窗口关闭时会自动关闭所有子窗口,如果某个子窗口不能关闭(如子窗口OnCloseQuery中的CanClose=False),则主窗口也不会关闭.
    3、窗体的OnClose和OnCloseQuery发生的时间是有先后的,窗体关闭前,首先产生OnCloseQuery事件,根据其中的CanClose参数决定是否可以关闭(缺省是True),如果可以关闭,才产生OnClose事件,OnClose事件是让程序处理善后工作,并确定窗口的关闭方式Action参数(缺省是隐藏),MDIChild窗口一般应该是撤销而不是隐藏,Action=caFree.
      

  2.   

    我太粗心了:)
    更正:‘MainForm的Close事件如下’应为MainForm 的ExitMenuItem事件代码.
      

  3.   

    我太粗心了:)
    更正:‘MainForm的Close事件如下’应为MainForm 的ExitMenuItem事件代码.另:我已经用showMessage(MDIChildCount)试过了,值=1.
      

  4.   

    我太粗心了:)
    更正:‘MainForm的Close事件如下’应为MainForm 的ExitMenuItem事件代码.并且我在ChildBaseForm的Close中增加了代码:  Action:=caFree;另:我已经用showMessage(MDIChildCount)试过了,值=1.
      

  5.   

    在MainForm.ExitMenuItem.OnClick事件中关闭所有子窗口同样是多此一举,直接写Close就行了。主窗口关闭时会自动关闭所有子窗口,如果某个子窗口不能关闭(如子窗口OnCloseQuery中的CanClose=False),则主窗口也不会关闭。你以前的代码没能执行这行代码。直接写Close,应该可以关闭,如还不能关闭而子窗口全部关闭,应检查子窗口的OnClose事件的Action的赋值,或者从你的子窗口的继承上找原因。