Leite deine Unterformulare von einer gemeinsamen Klasse ab, die das entsprechende Ereignis einführt:
Delphi-Quellcode:
type
TMyPageForm = class(TForm)
public
procedure FormChanging(AForm: TForm; var AllowChange: Boolean); virtual;
end;
procedure TMyPageForm.FormChanging(AForm: TForm; var AllowChange: Boolean);
begin
{macht in der Basisklasse erst mal nichts, kann überschieben werden}
end;
Ich gehe davon aus, jede Seite des PageControls hat nur ein Formular.
Im Ereignis des PageControls dann die einzelnen Formulare benachrichtigen:
Delphi-Quellcode:
procedure TForm1.cxPageControl1PageChanging(Sender: TObject; NewPage: TcxTabSheet; var AllowChange:
Boolean);
function FindMyPageForm(AWinControl: TWinControl): TMyPageForm;
var
i: Integer;
c: TControl;
begin
if Assigned(AWinControl) then
begin
for i := 0 to AWinControl.ControlCount - 1 do
begin
c := NewPage.Controls[i];
if c is TMyPageForm then
Exit(TMyPageForm(c));
{Rekursion}
if c is TWinControl then
begin
Result := FindMyPageForm(TWinControl(c));
if Result <> nil then
Exit;
end;
end;
end;
Result := nil;
end;
var
F, NewForm: TMyPageForm;
Page: TcxTabSheet;
i: Integer;
begin
NewForm := FindMyPageForm(NewPage);
for i := 0 to TcxPageControl(Sender).PageCount - 1 do
begin
Page := TcxPageControl(Sender).Pages[i];
F := FindMyPageForm(Page);
if Assigned(F) then
F.FormChanging(NewForm, AllowChange);
end;
end;
ungetestet