如何关闭我从中调用模态窗体的模态窗体

How to close a modal form from which I call a modal form

主窗体打开模态窗体B.
窗体 B 打开模态窗体 C.

如何在打开窗体 C 之前关闭窗体 B?

诀窍是推迟对 FormC 的 ShowModal 的调用,直到 FormB 关闭。以下代码可以放在 ButtonClick 事件处理程序中。它利用最近 Delphi 版本中可用的 ForceQueue 方法。赋予 ForceQueueAnonymous Method 稍后将在主线程中执行。这允许模态 FormB 在显示 FormC 之前完成。

  TThread.ForceQueue(nil,
    procedure
    var
      frm: TFormC;
    begin
      frm := TFormC.Create(Application);
      try
        frm.ShowModal;
      finally
        frm.Free;
      end;
    end
  );
  ModalResult := mrOK;