Есть главная форма Form1. В ней есть приватная Form2, а в Form2 есть публичная Form3. Мне надо сообщать Form1 о том, что в Form3 произошло сохранение данных. Вот код:
Код:
unit UForm1;
uses UForm2, UForm3;
TForm1 = class(TForm)
....
private
Form2:TForm2;
procedure OnDataSaved(Sender: TObject);
procedure OnForm3Create(Sender: TObject);
end;
implementation
...
procedure TForm1.OnDataSaved(Sender: TObject);
begin
...
end;
procedure TForm1.OnForm3Create(Sender: TObject);
begin
Form2.Form3.OnDataSaved := OnDataSaved; // в этом месте программа валится в рантайме!!!
end;
procedure TForm1.OnBtnClick(Sender:TObject);
begin
Form2 := TFOrm2.Create(nil);
Form2.OnForm3Create := OnForm3Create;
...
end;
Код:
unit UForm2;
uses UForm3;
TForm2 = class(TForm)
....
private
fOnForm3Create:TNotifyEvent;
public
property OnForm3Create:TNotifyEvent read fOnForm3Create write fOnForm3Create;
Form3:TForm3;
end;
implementation
procedure OnBtnClick(Sender:TObject); //
begin
...
Form3 := TForm3.Create(nil);
if assigned (fonForm3Create) then
fonForm3Create (self); //шлю сообщение главной форме о создании Form3, чтоб можно было процедуру OnDataSaved ассигновать
end;
Код:
unit UForm3;
TForm3 = class(TForm)
....
private
fOnDataSaved:TNotifyEvent;
procedure SaveData;
public
property OnDataSaved:TNotifyEvent read fOnDataSaved write fOnDataSaved;
end;
implementation
...
procedure TForm3.SaveData;
begin
...
if assigned (fonDataSaved) then
fonDataSaved (self); //шлю сообщение главной форме о сохранении данных
end;
Подскажите, пожалуйста, что здесь не так? Почему программа валится? Как на самом деле нужно сделать?