delphi – “无法创建表单.没有MDI表单当前处于活动状态“错误
我有一个MDI主(父)表单和一个MDI子表单.我在运行时创建了这样的子代:
VAR FrmDereplic: TFrmDereplic; procedure TMainFrm.Button2Click(Sender: TObject); begin FrmDereplic:= TFrmDereplic.Create(MainFrm); FrmDereplic.Show; end; 重现错误的步骤: 出现错误的行在子窗体中: procedure TFrmDereplic.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:= caFree; end; procedure TFrmDereplic.FormDestroy(Sender: TObject); VAR MyIniFile: TCubicIniFile; begin MyIniFile:= TCubicIniFile.Create(AppINIFile); TRY with MyIniFile DO begin if WindowState<> wsMaximized then begin // save form's screen pos ... end; WriteInteger ('Dereplicator','fltExtensions',fltExtensions.ItemIndex); <----- HERE FINALLY FreeAndNil(MyIniFile); END; end; 我将很多表单的属性(以及其他控件属性)保存到INI文件中.但是当我尝试保存fltExtensions.ItemIndex(这是一个TFilterComboBox)时它才会失败.如果我评论那条线它完美无缺. 知道为什么它在我实际关闭应用程序时尝试创建一个表单????????? 解决方法
我查看了一些网站,发现了问题.如果所有者是应用程序而不是主要表单,看起来更好. Remy Lebeau认为真正的问题在于儿童形式的OnDestroy.保持过滤器的窗口没有有效的句柄,然后调用OnDestroy.因此,更改销毁顺序使TFrmDereplic.OnDestroy有机会正确执行.
所以,这是解决方案: SOLUTION(S)
要么
第二个需要额外的代码行,因为OnClose甚至不总是被调用.
如果使用Application.Terminate,则不会调用onCloseQuery和onClose. Halt也是一样(但是……这太极端了吧?). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |