在delphi中切换表单

时间:2012-10-07 12:36:21

标签: delphi delphi-7

  

可能重复:
  Delphi application with login / logout - how to implement?

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

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

出现第二种形式,但无法与其进行交互,就像它被禁用一样。 为什么会这样做?

2 个答案:

答案 0 :(得分: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语法创建任何其他表单。如果您遵循该政策,则无需担心表单的创建顺序。

答案 1 :(得分:0)

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