Dann löse dieses Dilemma mit Events. So ein Frame muss doch nicht wissen, das es auf einer TFoobarForm ist. Wozu dann ein Frame? Der Sinn eines Frames ist doch, das man es wieder verwenden kann. Aber so sind die beiden Klassen wirklich untrennbar verbunden.
Es ist doch bestimmt so, das dein Hauptformular irgendetwas machen muss, wenn sich im Frame Daten ändern. Und Du veränderst die Daten der Hauptform im Code/Kontext des Frames.
Es ist praktischer, wenn das Frame seinem Eigentümer (oder wer auch immer das wissen will), Bescheid gibt, wenn sich etwas ändert. Dann kann der Eigentümer angemessen darauf reagieren, das Frame muss gar nichts über ihn wissen und alle (vor allen Dingen die
OOP-Gemeinde) sind zufrieden.
Du kannst das dann sehr leicht mit Events lösen:
Spendiere dem Frame ein Event 'OnDataChanged' mit einem Parameter, der besagt, WAS geändert wurde, etwa so:
Delphi-Quellcode:
Type
TDataOnFrameChangedEvent = Procedure (Sender : TObject; aControl : TControl);
Und dann weist Du jedem OnChange-Event deiner Eingabefelder auf dem Frame diese Methode zu:
Delphi-Quellcode:
Procedure TMyFrame.DataOnFrameChanged (Sender : TObject);
Begin
If Assigned (fDataOnFrameChanged) And (Sender Is TControl) Then
fDataOnFrameChangedEvent (Self, TControl (Sender));
End;
In Deinem Hauptformular erzeugst Du dir so eine Methode, implementierst *dort* die vorzunehmenden Aktionen und weist im FormCreate dem Frame-Ereignis diese Methode zu:
Delphi-Quellcode:
Procedure TMyMainForm.ReactOnDataChanged (Sender : TObject; aControl : TControl);
Begin
If Sender = frmMyFrame Then
If aControl = frmMyFrame.edVorname Then
ShowMEssage(Format ('Der Vorname wurde in %s geändert',[TEdit (aControl).Text]));
End;
Procedure TMyMainForm.FormCreate (Sender : TObject);
Begin
...
frmMyFrame.OnDataOnFrameChangted := ReactOnDataChanged
End;
Wenn sich im Frame nun etwas ändert, wird immer die Methode 'ReactOnDataChanged' über den Event-Mechanismus aufgerufen.
Ich finde diese Lösung auch deswegen besser, weil alle Aktionen, die Du im Hauptformulat in Abhängigkeit des Frames ausführst, in der Methode 'ReactOnDataChanged' konzentriert und an einer Stelle implementiert sind. Das ist übersichtlich und einfacher wartbar.