Delphi アプリケーションで 2 つのフォームを切り替えようとしています。最初にログイン画面が表示され、次にアプリケーションのメイン フォームが表示されます。
formx.hide と .show を使用してフォームを切り替えています。例えば。//パスワードチェック後 form1.hide; form2.show;
2 番目のフォームが表示されますが、無効になっているかのように操作できません。なぜこれを行うのでしょうか?
Delphi アプリケーションで 2 つのフォームを切り替えようとしています。最初にログイン画面が表示され、次にアプリケーションのメイン フォームが表示されます。
formx.hide と .show を使用してフォームを切り替えています。例えば。//パスワードチェック後 form1.hide; form2.show;
2 番目のフォームが表示されますが、無効になっているかのように操作できません。なぜこれを行うのでしょうか?
コードが提供されていないため、問題が何であるかを推測する必要があります。だからここに行きます。
フォームは、他のフォームがモーダルで表示されると無効になり、モーダル フォームが閉じられると再び有効になります。したがって、ほとんどの場合、ログイン フォームをモーダルに表示してから、閉じるのではなく非表示にします。モーダル フォームを閉じるには、モーダル フォームの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
構文を使用して作成できます。このポリシーに従えば、フォームがどの順序で作成されるかを気にする必要はありません。
メイン フォームは実際に作成される最初のフォームですか? Application.CreateForm で作成される最初のフォーム (.dpr ファイルのソースを確認してください) は、メイン フォームと見なされます。そのフォームを閉じると、基本的にアプリケーションが閉じます。