Event-Reihenfolge bei Form beenden



  • Hi Leute

    ich habe durch einen Absturz ein merkwürdige Phänomen bei meiner Form entdeckt.

    Ich klicke auf das Kreuz rechts oben in der Titelleiste.
    Hier nun die Event-Reihenfolge:

    1.OnClose-Event
    2.OnDestroy-Event
    3.D-tor der Formular-Klasse
    4.OnResize-Event

    Dummerweise greift das OnResize-Event auf einige Objekte der Klasse zu, die dann nach dem D-tor-Aufruf logischerweise schon weg sind.

    Ist das so richtig, dass am Ende noch das OnResize-Event aufgerufen wird? Scheint mir arg unlogisch.

    gruß

    Tobi



  • Das Problem hatte ich auch schon gehabt. Du kannst das aber relativ easy lösen. Schreib dazu einfach im OnCloseEvent der Form:

    OnResize=0;
    

    Damit wird verhindert, dass dieses Event nach der Zerstörung der Form nochmal aufgerufen wird.



  • Weiterhin wäre es gut auf den OnDestroy Event ganz zu verzichten und alle Aufräumarbeiten in den Destructor zu verlegen. Ähnlich wie bei OnCreate und Konstruktor.



  • Was es nicht Alles gibt 😮

    Was hat es denn nun damit auf sich, dass OnResize nach dem Dtor nochmal aufgerufen wird? Hat das einen speziellen Grund oder ist das wieder einer dieser Überraschungsmoment-Fehler?

    MfG



  • Hallo,

    nach Aufruf des Destruktors laufen noch (mindestens) folgende Messages auf:

    WM_WINDOWPOSCHANGING <<---
    WM_WINDOWPOSCHANGED
    WM_DESTROY
    WM_SETICON
    WM_GETICON
    WM_GETICON
    WM_GETICON
    WM_GETTEXTLENGTH
    WM_GETTEXT
    WM_NCDESTROY.

    Die obere, WM_WINDOWPOSCHANGING, setzt das Form komplett auf Null-Grösse. Möglicherweise wird daraufhin das
    OnResize ausgelöst.


Anmelden zum Antworten