forms - 表格未关闭

标签 forms delphi delphi-2007

我正在自动化用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/

相关文章:

javascript - react 链接状态形式

php - PHP 文件中的 CSS 表单边框格式

Delphi:关闭应用程序时如何调试访问冲突?

php - 在 php 中使用相同的表单插入和编辑数据

java - spring mvc - HTML表单传递请求参数

delphi - 找不到 Delphi 2007 WSDL 导入器

delphi - TADOQuery: 'EDatabaseError type mismatch for field ' MyField',期望:字符串实际:FixedWideChar'

delphi - 使用 Rad Studio 2007 读取 vcl.net 应用程序中的代理详细信息

windows - 具有常见 OnTerminate 行为的 TThread

Delphi 7 在每次构建时编译组件