如何在不关闭整个程序的情况下关闭窗口?

时间:2012-01-09 17:53:41

标签: delphi login tform

在我的应用程序中我有两种形式,比如LoginForm和AccountForm

LoginForm被设置为主窗体,它是用户能够从他的帐户登录时的表格(两个TEdits和登录按钮)。当用户键入其登录详细信息并进行连接时,将打开一个名为AccountForm的新表单。

如何在不关闭整个应用程序的情况下关闭登录成功时的LoginForm?或者用这种语言如何使用下面的代码来关闭登录表单而不是关闭应用程序。

if (not IncludeForm.sqlquery1.IsEmpty) and (isblacklisted='0') and (isactivated='1')  then
begin // Login Successful *** Show the account window
AccountForm.Show;
LoginFrom.Close; // <----The problem is in this line, using this line causes the whole application to close***}
end;

三江源

2 个答案:

答案 0 :(得分:10)

不要将LoginForm作为主窗体。如果使用创建loginform LoginForm := TLoginForm.Create而不是Application.CreateForm,表单不会被设置为应用程序主窗体。使用Application.CreateForm创建的第一个表单将是主窗体。 您可以编辑项目文件(.dpr)以将其更改为:

program YourApp;

uses
  Forms,
  fLoginForm in 'fLoginForm.pas' {LoginForm},
  fMainForm in 'fMainForm.pas' {MainForm};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  with TLoginForm.Create(nil) do
  try
    ShowModal;
  finally
    Free;
  end;
  Application.CreateForm(TMainForm, MainForm);
  Application.Run;
end.

您还可以创建自己的应用程序主循环来检查正在打开的特定表单,但这比上面的解决方案更难,更脆弱。

答案 1 :(得分:6)

您可以here提取Display a LogIn / Password Dialog Before the Main Form is Created优秀文章Zarko Gajic 的源代码。

摘录:

program PasswordApp;

uses
  Forms,
  main in 'main.pas' {MainForm},
  login in 'login.pas' {LoginForm};

{$R *.res}

begin
  if TLoginForm.Execute then
  begin
    Application.Initialize;
    Application.CreateForm(TMainForm, MainForm) ;
    Application.Run;
  end
  else
  begin
    Application.MessageBox('You are not authorized to use the application. The password is "delphi".', 'Password Protected Delphi application') ;
  end;
end.