可能重复:
带有登录/注销的Delphi应用程序-如何实现?
我试图在我的 delphi 应用程序中的两个表单之间切换,首先出现登录屏幕,然后出现应用程序的主表单。
我正在使用 formx.hide 和 .show 在表单之间切换。例如。//密码检查后 form1.hide; form2.show;
第二个表单出现,但不能与之交互,就好像它被禁用一样。为什么会这样做?
可能重复:
带有登录/注销的Delphi应用程序-如何实现?
我试图在我的 delphi 应用程序中的两个表单之间切换,首先出现登录屏幕,然后出现应用程序的主表单。
我正在使用 formx.hide 和 .show 在表单之间切换。例如。//密码检查后 form1.hide; form2.show;
第二个表单出现,但不能与之交互,就好像它被禁用一样。为什么会这样做?
由于您没有提供任何代码,我们不得不猜测您的问题是什么。所以这里。
当其他表单以模态方式显示时,表单会被禁用,然后在模态表单关闭时重新启用。因此,您很可能以模态方式显示登录表单,然后将其隐藏而不是关闭。要关闭模态表单,您需要设置模态表单的ModalResult
属性。如果您隐藏而不是关闭,则主窗体仍将被禁用。关键是您必须在主窗体可用之前正确关闭模态窗体。
通常对于具有初始登录表单的应用程序,您可以像这样组织应用程序的 .dpr 文件:
var
LoginForm: TLoginForm;
MainForm: TMainForm;
LoginSucceeded: Boolean;
begin
Application.Initialize;
LoginForm := TLoginForm.Create(nil);
try
LoginForm.ShowModal;
LoginSucceeded := LoginForm.Successful;
finally
LoginForm.Free;
end;
if LoginSucceeded then
begin
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end;
end;
使用创建的第一个表单Application.CreateForm
成为您的应用程序的主要表单。当主窗体关闭时,整个应用程序随之关闭。在我看来,你应该Application.CreateForm
只用于创建主窗体。可以使用该TMyForm.Create
语法创建任何其他形式。如果您遵循该政策,那么您无需担心表单的创建顺序。
主窗体实际上是要创建的第一个窗体吗?使用 Application.CreateForm 创建的第一个表单(检查 .dpr 文件的来源)被视为主表单。关闭该表单实际上会关闭应用程序。