Oder:
Ableitung von TObjectList erstellen, da das OnChange Event dranpacken. Im Konstruktor von TGesellschaftsname gibst du die Liste mit. TGesellschaftsname kennt dann seine Liste und kann dann das Event an der Liste aufrufen (und sich vorher selbst der Liste hinzufügen), was du ja nur einmal im Programm an der Liste zuweisen musst. So wird die Liste eine Art Manager für die einzelnen Objekte, und es ist, finde ich, nicht unwahrscheinlich, dass man das gut gebrauchen kann, zum Beispiel für eine Funktion, die mit allen Objekten in der Liste irgendwas machen soll.
So hingetippselt, hoffe das funktioniert bzw. ist irgendwie unter Umständen hilfreich...
Delphi-Quellcode:
interface
type
TGesellschafterListe = class;
TGesellschafterListeChangeEvent = procedure(Sender: TObject; Obj: TGesellschaftsname) of object;
TGesellschaftsname = class
private
FList: TGesellschafterListe;
public
procedure TriggerChange;
constructor Create(List: TGesellschafterListe);
end;
TGesellschafterListe = class(TObjectList)
private
FOnChange: TGesellschafterListeChangeEvent;
public
property OnChange: TGesellschafterListeChangeEvent read FOnChange write FOnChange;
end;
implementation
procedure TGesellschaftsname.Create(List: TGesellschafterListe);
begin
inherited;
FList := List;
FList.Add(Self);
end;
procedure TGesellschaftsname.TriggerChange;
begin
if Assigned(FList) then
if Assigned(FList.OnChange) then
FList.OnChange(FList, Self);
end;
procedure GesellschafterListeOnChange(Sender: TObject; Obj: TGesellschaftsname);
begin
// Schnack, hier hat sich das Objekt "Obj" verändert
end;
var
GesellschafterListe : TGesellschafterListe;
begin
GesellschafterListe := TGesellschafterListe(True);
GesellschafterListe.OnChange := GesellschafterListeOnChange;
TGesellschaftsname.Create(GesellschafterListe);
TGesellschaftsname.Create(GesellschafterListe);
TGesellschaftsname.Create(GesellschafterListe);
GesellschafterListe.Free;
end;