Delphi中的表单切换

4
我正在尝试在我的Delphi应用程序中切换两个窗体,首先是登录屏幕,然后是应用程序的主窗体。 我使用formx.hide和.show来在窗体之间进行切换。 例如: //密码检查后 form1.hide; form2.show; 第二个窗体出现了,但似乎无法与之交互,就像被禁用一样。 为什么会这样?

1
第一个窗体是主窗体,但仅仅隐藏它不应该成为问题,对吧?因为它仍在运行,只是不可见而已。 - user1726682
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 语法来创建。如果您遵循这个规则,那么您就不需要担心表单创建的顺序。

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接