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

时间:2019-06-03 19:49:37

标签: delphi 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上实现这一目标?

3 个答案:

答案 0 :(得分:2)

恐怕这将无法完全按照您的想象。为什么?

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

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

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

答案 1 :(得分:0)

@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;

答案 2 :(得分:0)

您解决了吗?

可以在下一个使用:

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

end;