Delphi:关闭所有表单(MainForm除外),但忽略任何OnCloseQuery对
发布时间:2020-12-15 09:25:01 所属栏目:大数据 来源:网络整理
导读:基本上,我正在使用TTimer事件来关闭所有打开的表单并将用户带回主表单. 我可以遍历Screen.Forms: for i := 0 to Screen.Formcount - 1 do Screen.Forms[i].close; 问题是某些表单上的OnCloseQuery事件 – 它们会弹出MessageDlg来中断这个过程:( 解决方法 在
基本上,我正在使用TTimer事件来关闭所有打开的表单并将用户带回主表单.
我可以遍历Screen.Forms: for i := 0 to Screen.Formcount - 1 do Screen.Forms[i].close; 问题是某些表单上的OnCloseQuery事件 – 它们会弹出MessageDlg来中断这个过程:( 解决方法
在询问用户是否继续之前,您可以在主表单中使用其他表单将检查的标记.像这样的东西:
单元1 type TForm1 = class(TForm) .. public UnconditinalClose: Boolean; end; .. procedure TForm1.Timer1Timer(Sender: TObject); begin UnconditinalClose := True; end; 单元2: implementation uses unit1; procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose := unit1.Form1.UnconditinalClose; if not CanClose then // ask the user if he/she's sure he/she wants to close end; 另一个解决方案可能是分离其他形式的OnCloseQuery事件处理程序.只有在关闭时释放(释放)这些其他形式,而不是隐藏(编辑以反映Rob的评论)时,这才是实用的: procedure TForm1.Timer1Timer(Sender: TObject); var i: Integer; SaveHandler: TCloseQueryEvent; begin for i := 0 to Screen.Formcount - 1 do if Screen.Forms[i] <> Self then begin SaveHandler := Screen.Forms[i].OnCloseQuery; Screen.Forms[i].OnCloseQuery := nil; Screen.Forms[i].Close; Screen.Forms[i].OnCloseQuery := SaveHandler; end; end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |