如何清除所有表格并在 Firemonkey 中打开一个新表格?

How clear all forms and open a new one in Firemonkey?

假设用户正在 Android/iOS 应用程序中导航并打开以下表单:

Form A --> Form B --> Form C

Form C 中,他按下按钮退出应用程序。这应该清除所有以前的表格(包括 Form C)并打开一个新表格(Signin Form D)。

所以它会是这样的:

  1. Form A --> Form B --> Form C --> Press Logout Button
  2. 关闭 Form ABC
  3. 打开Form D
  4. 现在,如果用户在 Form D 中按下后退按钮,应用程序将关闭,因为任务中没有更多表单。

我尝试打开 Form D 并关闭以前的表格,但它并没有完全释放以前的表格。无论如何要为 Android/iOS 实现这个目标?

恐怕这不会像您想象的那样有效。为什么?

在 Delphi 应用程序中,创建的第一个表单变为 Application MainForm。关闭此表单会关闭整个应用程序。

现在,在您的情况下,您说 Form A 是第一个打开的表单,这意味着它会自动成为您应用程序的 MainForm。因此关闭它将关闭您的应用程序。

因此,为了实现您想要的效果,您必须确保 Form D 实际上是在您的应用程序中创建的第一个表单。

@SilverWarior 确实是正确的。问题是 Form A 一直是 ApplicationMainForm,因此无法关闭。然而,正如@Remy Labeau 和@Tom Brunberg 所说。 MainForm 可以在应用程序运行时更改。

为了解决这个问题,我使用了下面的代码。假设我在 Form A,我想导航到 Form B 并关闭上一个表单。

if not Assigned(frmFinanceiro) then
  frmFinanceiro := TfrmFinanceiro.Create(Application);
Application.MainForm := frmFinanceiro;
frmFinanceiro.Show;
Close;

你解决了吗?

下次可以使用:

procedure TfrmMain.FormKeyDown(Sender: TObject; var Key: Word;
  var KeyChar: Char; Shift: TShiftState);
begin
  if Key = vkHardwareBack then
  begin
    Key := 0;
  end;

end;