Zitat von
maximov:
Geht schon musst nur sicherstellen, dass der button kein sub-object von dem panel mehr ist
Hallo Maximov,
im Destruktor von
TComponent, dem (indirekten) Vorfahren von
TButton wird ua diese Referenz implizit aufgelöst
Delphi-Quellcode:
destructor TComponent.Destroy;
//...
begin
//...
if FOwner <> nil then FOwner.RemoveComponent(Self);
inherited Destroy;
end;
Jedoch sollte man generell nicht in den Eventhandlern, das Auslösende Objekt freigeben. In vielen Fällen ist die
VCL so programmiert, dass dies zu einem Absturz führt. Hier zB ein Ausschnitt aus der Implementierung von
TDataset aus
db.pas:
Delphi-Quellcode:
procedure TDataSet.SetActive(Value: Boolean);
begin
//...
DoBeforeOpen;
try
OpenCursor;
finally
if State <> dsOpening then
OpenCursorComplete;
end;
//...
end;
Wenn Du also in
OnBeforeOpen das ereignisauslösende Objekt freigibst, wird (abhängig von der konkreten Implementierung des Erbens) wahrscheinlich in
OpenCursor spätestens aber bei
if State <> dsOpening ein Fehler auftreten...