Autor Beitrag
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Do 19.04.12 20:37 
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?
Einloggen, um Attachments anzusehen!
_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 19.04.12 20:47 
Moin!

user profile icontrm hat folgendes geschrieben Zum zitierten Posting springen:
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

_________________
There are 10 types of people - those who understand binary and those who don´t.

Für diesen Beitrag haben gedankt: trm
trm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: 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 :(

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.

Für diesen Beitrag haben gedankt: trm
trm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Do 19.04.12 21:08 
Danke euch beiden :)

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)