Einzelnen Beitrag anzeigen

choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#6

Re: Selbstzerstörung eines Controls

  Alt 6. Nov 2003, 17:40
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...
gruß, choose
  Mit Zitat antworten Zitat