gpt4 book ai didi

Delphi:关闭所有表单(MainForm 除外),但是忽略任何 OnCloseQuery 对话框

转载 作者:行者123 更新时间:2023-12-03 15:25:51 25 4
gpt4 key购买 nike

基本上,我使用 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 事件处理程序。 只有在关闭时释放(释放)这些其他表单而不是隐藏时,这才实用 (编辑以反射(reflect) 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;

关于Delphi:关闭所有表单(MainForm 除外),但是忽略任何 OnCloseQuery 对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10871214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com