Darf ich dazu noch ein paar Takte Generics einwerfen?
Delphi-Quellcode:
uses
System.Sysutils; // wegen TProc<T>
type
TUtilities = record
class procedure ForIn<T: class>(const Targets: array of T; DoProc: TProc<T>); static;
end;
class procedure TUtilities.ForIn<T>(const Targets: array of T; DoProc: TProc<T>);
var
instance: T;
begin
for instance in Targets do
DoProc(instance);
end;
Damit ließe sich dein Code dann so schreiben (zwar etwas länger, aber deutlich flexibler und typsicher):
Delphi-Quellcode:
TUtilities.ForIn<TCheckBox>([CheckBox2, CheckBox4],
procedure (ACheckBox: TCheckBox)
begin
ACheckBox.Checked := True;
end);
TUtilities.ForIn<TCheckBox>([CheckBox1, CheckBox3],
procedure (ACheckBox: TCheckBox)
begin
ACheckBox.Checked := false;
end);
TUtilities.ForIn<TEdit>([Edit1, Edit2],
procedure (AEdit: TEdit)
begin
AEdit.Text := '';
end);
TUtilities.ForIn<TEdit>([Edit3],
procedure (AEdit: TEdit)
begin
AEdit.Text := 'Hallo Welt';
end);