3

私のアプリケーションでは、これらのフォームの量がアプリケーションによって異なるため、これらのフォームがまったく同じVCL、イベント、およびプロシージャを持つ複数のフォームでデータを表示する必要があります。したがって、設計時にすべてを作成することはできません。

または、実行時にフォームのコピーを複数回作成するにはどうすればよいですか?

4

2 に答える 2

7

フォームがTForm2として宣言されているとすると、次のように10個のインスタンスを簡単に作成できます。

var 
  myForms: TArray<TForm2>;
  I: Integer;
begin
  SetLength(myForms, 10);
  for I:=0 to 9 do begin
    myForms[I] := TForm2.Create(Application);  // Application will free the forms on exit
    myForms[I].Show;
  end;
end;

フォームインスタンスにアクセスする必要がない場合は、配列を完全に省略して次のように記述できます。

var 
  I: Integer;
begin
  for I:=0 to 9 do begin
    TForm2.Create(Application).Show;  // Application will free the forms on exit
  end;
end;
于 2012-08-26T16:29:50.550 に答える
0

不確定な数のフォームを作成するには、このコードを使用できます。

private
   MyForm: array of TForm;

procedure TForm1.CreateForms(Sender: TObject);
begin
  SetLength(MyForm, Length(MyForm) + 1);
  MyForm[Length(MyForm) - 1] := TForm1.Create(Self);
  MyForm[Length(MyForm) - 1].Name := 'Form' + IntToStr(Length(MyForm));
  MyForm[Length(MyForm) - 1].Caption := 'Form' + IntToStr(Length(MyForm));
  MyForm[Length(MyForm) - 1].Show;
end;
于 2012-08-26T18:59:13.780 に答える