gpt4 book ai didi

forms - 表格未关闭

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

我正在自动化用Delphi编写的开源程序。从主窗体,我执行以下循环:

for i := 0 to analysisNames.Count - 1 do begin
currentAnalysisName := analysisNames[i];
analysisID := DatabaseModule.GetAnalysisIDForName(analysisNames[i]);
frmIIGraph.autoMode := true;
frmIIGraph.ShowModal();
end;


如您所见,它将打开一个名为frmIIGraph的表单。在该表单中,我必须打开另一个表单,使用以下代码进行操作:

procedure TfrmIIGraph.FormActivate(Sender: TObject);
begin
if autoMode then begin
events := DatabaseModule.GetEvents(analysisID);
frmEventEdit.autoMode := true;
frmEventEdit.OpenDialog(events,0,analysisID);
frmEventEdit.ShowModal();
//frmEventEdit.Close;
SetFocus;
ModalResult := mrOK;
PostMessage(Self.Handle,wm_close,0,0);
end;
end;


通过上述方法打开的表单称为frmEventEdit。在该表格中,我正在运行以下代码:

procedure TfrmEventEdit.FormActivate(Sender: TObject);
begin
if autoMode then begin
btnRTK_CalcClick(nil);
ModalResult := mrOK;
PostMessage(Self.Handle,wm_close,0,0);
end;
end;


问题在于后面的代码中的 PostMessage(Self.Handle,wm_close,0,0);可以正常工作并关闭该窗体,将 frmIIgraph上的代码恢复为 SetFocus;。但是,IIGraph表单代码中的 PostMessage(Self.Handle,wm_close,0,0);不会关闭图形表单,因此对于循环的下一次迭代,可以在主表单上继续执行。您必须手动关闭图形才能继续。

任何帮助表示赞赏。

最佳答案

您的基本问题是,您已将所有业务逻辑编码为GUI代码。因此,如果没有问题中看到的复杂代码,就无法执行要执行的代码。

如果您想解决自己的实际问题,则可以解决造成麻烦的根本原因。您将分离业务逻辑和GUI代码。您将安排您的业务逻辑能够在没有GUI的情况下执行。

如果您不想解决真正的问题,并希望继续这种疯狂,则需要在WM_CLOSEfrmIIGraph.Handle事件处理程序中向OnDeactivate发送TfrmEventEdit消息。大概您在TfrmIIGraph.FormActivate中发布的内容已被子窗体的消息循环或某些对ProcessMessages的调用所占用。但是我不能认为这是理智的前进方式。

关于forms - 表格未关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25190453/

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