2017-06-17 2 views
0

Ich bin ziemlich neu in Delphi (ich benutze Version 10.1 Berlin), und ich versuche zu verstehen, wie Vererbung funktioniert.FormClose Vererbung

Angenommen, ich habe zwei Formulare, die beim Schließen dieselbe Aktion ausführen müssen. Um zu vermeiden, Code-Duplizierung, meine erste Idee, eine übergeordnete Klasse zu schaffen war, TFoobarForm, die von TForm erbt, und dann ein Verfahren FormClose wie folgt zu erstellen:

procedure TFoobarForm.FormClose(Sender: TObject; var Action: TCloseAction); 
begin 
    { Some code } 
end; 

Danach würde Ich mag 2 Formulare erstellen, lassen Sie uns sagen TFooForm und TBarForm, die von TFoobarForm erben. Aber ich weiß nicht, ob es eine Möglichkeit gibt, diese neuen Formulare dazu zu bringen, die Aktion der Superklasse FormClose auszuführen, ohne die Prozedur manuell von jeder Klasse aufrufen zu müssen, die von ihr erbt.

Am Ende für das, was ich suche, ist eine Möglichkeit, dies zu schreiben zu vermeiden:

procedure TFooForm.FormClose(Sender: TObject; var Action: TCloseAction); 
begin 
    inherited FormClose(Sender, Action); 
end; 

für jede Unterklasse von TFoobarForm.

Antwort

5

Haben die Basisklasse die virtuelle DoClose() Methode überschreiben:

type 
    TFoobarForm = class(TForm) 
    protected 
    procedure DoClose(var Action: TCloseAction); override; 
    end; 

procedure TFoobarForm.DoClose(var Action: TCloseAction); 
begin 
    { Some code } 
    // call inherited to trigger the OnClose event, if it is assigned... 
end; 

Dann brauchen Sie keine OnClose Event-Handler in den abgeleiteten Klassen überhaupt zuordnen (es sei denn, sie wirklich das Ereignis anders behandeln wollen, dann die Basisklasse).