Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - TPageControl erzeugt einen Abstrakten Fehler, beim Löschen
trm - Do 19.04.12 20:37
Titel: TPageControl erzeugt einen Abstrakten Fehler, beim Löschen
Halli und Hallo schon wieder.
Seit 2 Tagen mühe ich mich mit einem Problem herum, welches ich einfach nicht lösen kann.
Im Anhang ist ein Beispiel mit 2 Proceduren.
Ein TabControl auf einer Form mit 3 statischen TabSheets und der Möglichkeit weitere TabSheets zur Laufzeit hinzuzufügen ist gegeben.
Außerdem kann die aktuelle TabSheetseite per Button gelöscht werden.
nun das Kuriose: beim 1. Löschen eines neu hinzugefügten TabSheets klappt in der Regel alles wunderbar. Wenn ein weiteres TabSheet gelöscht werden soll, gibt es einen abstrakten Fehler, NACHDEM die komplette Procedure durchlaufen wurde. Also direkt beim end; der Procedure.
Wo liegt mein Gedankenfehler?
Narses - Do 19.04.12 20:47
Moin!
trm hat folgendes geschrieben : |
Außerdem kann die aktuelle TabSheetseite per Button gelöscht werden. |
Falls du direkt im OnClick des Buttons das Tab (und damit auch den Button) löschen willst: das geht nicht, man kann Controls nicht in ihren eigenen Ereignissen löschen! Lösung: schicke dir im Handler eine (eigene Lösch-)Message mit PostMessage und entferne dann die Controls in diesem separaten Messagehandler. :idea:
cu
Narses
trm - Do 19.04.12 20:53
Danke, Narses.
Aber warum geht es manchmal und manchmal nicht?
Eben hatte ich mal als Test einen externen Button angelegt, der das aktive TabSheet löscht, ohne, dass der Button auf dem TabSheet benutzt wird.
Damit ging es wunderbar. Somit wäre Dein Hinweis bestätigt gewesen.
Dann habe ich nochmal 12 TabSheets zur Laufzeit erzeugt und von denen konnte ich 8 per Button auf dem TabSheet löschen, dann erst gab es wieder einen Fehler :(
jaenicke - Do 19.04.12 21:06
Weil nicht mehr genutzter Speicher nicht geleert wird, sondern nur als frei markiert wird. Das heißt die Daten sind noch da bis das Programm etwas anderes an die Stelle schreibt.
Wenn der Button nun freigegeben wird, aber das Programm bis zum Ende der Ereignisbehandlung den freigewordenen Speicherbereich des gelöschten Buttons nicht überschreibt, kann das Programm noch auf dessen Daten zugreifen und es klappt. Wenn der Speicher aber schon teilweise überschrieben ist, knallt es.
Da das reiner Zufall ist (naja, zumindest wirkt es sich so aus ;-)), passiert es eben mal und mal nicht.
trm - Do 19.04.12 21:08
Danke euch beiden :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!