4

可能重复:
带有登录/注销的Delphi应用程序-如何实现?

我试图在我的 delphi 应用程序中的两个表单之间切换,首先出现登录屏幕,然后出现应用程序的主表单。

我正在使用 formx.hide 和 .show 在表单之间切换。例如。//密码检查后 form1.hide; form2.show;

第二个表单出现,但不能与之交互,就好像它被禁用一样。为什么会这样做?

4

2 回答 2

8

由于您没有提供任何代码,我们不得不猜测您的问题是什么。所以这里。

当其他表单以模态方式显示时,表单会被禁用,然后在模态表单关闭时重新启用。因此,您很可能以模态方式显示登录表单,然后将其隐藏而不是关闭。要关闭模态表单,您需要设置模态表单的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语法创建任何其他形式。如果您遵循该政策,那么您无需担心表单的创建顺序。

于 2012-10-07T13:04:04.017 回答
0

主窗体实际上是要创建的第一个窗体吗?使用 Application.CreateForm 创建的第一个表单(检查 .dpr 文件的来源)被视为主表单。关闭该表单实际上会关闭应用程序。

于 2012-10-07T12:44:13.543 回答