私のアプリケーションでは、これらのフォームの量がアプリケーションによって異なるため、これらのフォームがまったく同じVCL、イベント、およびプロシージャを持つ複数のフォームでデータを表示する必要があります。したがって、設計時にすべてを作成することはできません。
または、実行時にフォームのコピーを複数回作成するにはどうすればよいですか?
私のアプリケーションでは、これらのフォームの量がアプリケーションによって異なるため、これらのフォームがまったく同じVCL、イベント、およびプロシージャを持つ複数のフォームでデータを表示する必要があります。したがって、設計時にすべてを作成することはできません。
または、実行時にフォームのコピーを複数回作成するにはどうすればよいですか?
フォームが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;
不確定な数のフォームを作成するには、このコードを使用できます。
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;