4

重複の可能性:
ログイン/ログアウトを伴う Delphi アプリケーション - 実装方法

Delphi アプリケーションで 2 つのフォームを切り替えようとしています。最初にログイン画面が表示され、次にアプリケーションのメイン フォームが表示されます。

formx.hide と .show を使用してフォームを切り替えています。例えば。//パスワードチェック後 form1.hide; form2.show;

2 番目のフォームが表示されますが、無効になっているかのように操作できません。なぜこれを行うのでしょうか?

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 に答える