如何清除所有表格并在 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
)。
所以它会是这样的:
Form A --> Form B --> Form C --> Press Logout Button
- 关闭
Form A
、B
和 C
- 打开
Form D
- 现在,如果用户在
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;
假设用户正在 Android/iOS 应用程序中导航并打开以下表单:
Form A --> Form B --> Form C
在 Form C
中,他按下按钮退出应用程序。这应该清除所有以前的表格(包括 Form C
)并打开一个新表格(Signin Form D
)。
所以它会是这样的:
Form A --> Form B --> Form C --> Press Logout Button
- 关闭
Form A
、B
和C
- 打开
Form D
- 现在,如果用户在
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;