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-EventDummerweise 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.