unit Unit2;
interface
uses
System.Classes, System.Generics.Collections, System.Generics.Defaults, System.SysUtils,
Vcl.Forms,
Vcl.Controls,
Vcl.StdCtrls;
form_child;
// :-) entspricht nicht dem Styleguide...besser FormChild
type
TForm2 =
class(TForm)
btnCreateChild: TButton;
lblList: TLabel;
lblDict: TLabel;
lblDict2: TLabel;
procedure btnCreateChildClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FList: TObjectList<TForm>;
FDictionary: TObjectDictionary<
string, TForm>;
public
end;
var
Form2: TForm2;
implementation
procedure TForm2.FormCreate(Sender: TObject);
begin
FList := TObjectList<TForm>.Create(True);
// True gibt die Objekte selbstständig frei
FDictionary := TObjectDictionary<
string, TForm>.Create([doOwnsValues]);
// doOwnValues gibt die Objekte (Value) selbstständig frei
end;
procedure TForm2.FormDestroy(Sender: TObject);
begin
FList.Free;
FDictionary.Free;
end;
procedure TForm2.btnCreateChildClick(Sender: TObject);
var
I: Integer;
Child: TForm;
TempForm: TForm;
begin
for I := 0
to 2
do
begin
Child := Tfrm_child.Create(
nil);
// :-) entspricht nicht dem Styleguide...besser TfrmChild
Child.
Name := '
Child' + IntToStr(I);
Child.Align := alLeft;
Child.Parent := cxScrollbox;
Child.AlignWithMargins := True;
Child.pnlchild.Color := clRed;
Child.pnlchild.Caption := '
ArrayINDEX = ' + IntToStr(Integer);
FList.Add(Child);
FDictionary.Add(Child.
Name, Child);
Child.Show;
end;
lblList.Caption := '
Name des ersten Eintrages: ' + FList[0].
Name;
lblDict.Caption := '
Name des 2. Eintrages im Dictionary: ' + FDictionary.Items['
Child2'].
Name;
// Wenn man nicht weiß ob der Schlüssel existiert
FDictionary.TryGetValue('
Child2', TempForm);
if Assigned(TempForm)
then
begin
lblDict.Caption := '
Name des 3. Eintrages im Dictionary: ' + TempForm.
Name;
end
else
begin
lblDict.Caption := '
Name des 3. Eintrages im Dictionary: nicht gefunden';
end;
end;
end.