1

「フォームを作成できません。現在アクティブな MDI フォームはありません」という問題を解決するにはどうすればよいですか。メインフォームにアクセスする前にログインフォームを必要とする単純なプログラムを作成したいと考えています。Main Form (MDI Form)、Form2 (MDIChild)、Login Form (Normal) の 3 つのフォームを取得しました。ログイン フォームが最初に表示され、次にメイン フォームが表示され、次にメイン フォームからフォーム 2 を呼び出そうとすると、「フォームを作成できません。現在アクティブな MDI フォームはありません」というエラーが表示されます。Windows XP で Delphi 7 を使用しています。私は初心者です。ありがとうございます。

4

1 に答える 1

4

LoginForm を自動作成させているようで、最初に作成されています。Application.CreateFormプロジェクト ファイルでによって作成された最初のフォームがApplication.MainForm. MDI アプリケーションであるためにはMainForm、MDI 親ウィンドウでなければなりません。

解決策は通常、ログイン フォームを自動作成せず、自分で作成することです。そのためには、( Project->View SourceIDE のメイン メニューから) .dpr ファイルを編集する必要があります。

プロジェクト ソースは次のようになります (明らかに、Application.CreateForm呼び出しでクラスを使用します)。

begin
  Application.Initialize;
  Application.CreateForm(TLoginForm, LoginForm);
  Application.CreateForm(TMainForm, MainForm);
  Application.CreateForm(TChildForm, ChildForm);
  Application.Run;
end.

LoginFormが最初に作成されないように変更する必要があります。

var
  LoginOK: Boolean = False;

begin
  LoginForm := TLoginForm.Create(nil);
  try
    // Show login form. When it closes, see if login worked.
    LoginForm.ShowModal;
    LoginOK := LoginForm.CanLogin; // However you know login is OK or not here
  finally
    LoginForm.Free;
  end;
  if not LoginOK then
    Halt;    // Login failed - terminate application.
  Application.Initialize;
  Application.CreateForm(TMainForm, MainForm);
  {
     I normally do not auto-create anything but the main form
     and maybe a datamodule (which you **can** autocreate first -
     it is not a form), but a MDI application is pretty useless
     without at least one open child window, IMO.
  }
  Application.CreateForm(TChildForm, ChildForm);
  Application.Run;
end.
于 2012-06-23T22:43:07.983 に答える