Guten Morgen, Allerseits.
Auf einem Formular sollen sich mehrere Panels befinden, in denen jeweils mehrere Labels platziert werden. Um alle Labels in einer Schleife durchlaufen zu können, wollte ich die Parent-Eigenschaft der Labels ändern. Ich habe das mit einem Panel und 18 Labels so versucht:
Delphi-Quellcode:
for I := 0 to Panel3.Controls.Count - 1 do
begin
Panel3.Controls[i].Parent := Self.Panel1
end; // for I := 0 to Panel3.Controls.Count - 1 do
Nach dem 8. Durchlauf brach das Programm mit der im Titel erwähnten Fehlermeldung ab. Ich habe dann die Anzahl der Labels im Panel auf sieben reduziert; darauf brach das Programm nach dem dritten Schleifendurchlauf ab. Mit nur einem Label klappt es, mit zwei Labels nicht mehr. Warum???
Gruß Jürgen
<Edit>
Dem Fehler bin ich jetzt auf die Spur gekommen: Durch die Änderung der Parent-Eigenschaft verringert sich die Zahl der Labels auf dem Panel, so dass nach der Hälfte der ursprünglich vorhandenen Labels die
Exception ausgelöst wird. Das lässt sich dadurch lösen, dass man die Schleife rückwärts durchläuft. Der gewünschte Erfolg ist aber trotzdem ausgeblieben: Jetzt sind die Labels nicht mehr sichtbar (trotz BringToFront). Außerdem hat Self.Controls.Count nach dem durchlaufen der Schleife noch immer den Wert 1, Panel3.Controls.Count hat jetzt den Wert 0 - was bedeuten würde, dass die Labels aus dem Panel verschwunden sind, ohne sich jetzt im Formular zu befinden. Wo sind sie???