Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Listindex überschreitet Maximum - Einmal ja, einmal nein? (https://www.delphipraxis.net/79943-listindex-ueberschreitet-maximum-einmal-ja-einmal-nein.html)

Muetze1 31. Okt 2006 18:37

Re: Listindex überschreitet Maximum - Einmal ja, einmal nein
 
Zitat:

Zitat von draGo
Delphi-Quellcode:
for I := 0 to StringLst.Count -1  do begin
  frmmain.anzeige.Rowcount := frmmain.anzeige.rowcount +1;

  if zeile > 7 then
    zeile := 0;

   if StringLst.Strings[i] = '' then
      StringLst.Delete(i);


  Frmmain.Anzeige.Cols[zeile].Add(StringLst.strings[i]);
  zeile := zeile +1;

 end;

Du löscht Einträge in der StringList und dabei verringert sich der Count. Das Problem dabei: For Schleifen evaluieren nur einmal die Laufvariablengrenzen und während des Durchlaufs nicht mehr. Dadurch läuft er zu der Originalen Count Anzahl durch und greift damit auf die ungültigen Einträge zu, wenn welche gelöscht wurden. Abhilfe schafft hier die Schleife rückwärts laufen zu lassen (DownTo) oder einen anderen Schleifentyp zu nutzen wie z.B. While.

draGo 31. Okt 2006 22:21

Re: Listindex überschreitet Maximum - Einmal ja, einmal nein
 
Hallo Muetze,

habe die Schleife jetzt rückwärts laufen lassen mit

Delphi-Quellcode:
for I := StringLst.Count -1 DOWNTO 0 do begin
//code...
Mache ich da etwas falsch? Denn einen Error mit "Listindex überschreitet Maximum" erhalte ich immer noch...

mfg
drago

Ghostwalker 1. Nov 2006 00:17

Re: Listindex überschreitet Maximum - Einmal ja, einmal nein
 
Prüf mal mit dem Debugger ob "StringLst.Count" auch größer 0 ist :)

TStringlist 1. Nov 2006 07:35

Re: Listindex überschreitet Maximum - Einmal ja, einmal nein
 
@Ghostwalker, wäre "StringLst.Count"=0 (dh. der I-Startwert=-1), dann würde diese DownTo-0-Schleife überhaupt nicht durchlaufen.

Ghostwalker 1. Nov 2006 09:08

Re: Listindex überschreitet Maximum - Einmal ja, einmal nein
 
Ähm...das ist natürlich richtig. Ich sollte Nachts um Eins keine Postings mehr mache....:)

Hawkeye219 1. Nov 2006 09:16

Re: Listindex überschreitet Maximum - Einmal ja, einmal nein
 
Hallo draGo,

beim Löschen eines Listenelements rücken normalerweise alle folgenden Elemente nach. Das letzte Element einer Liste hat aber keine Nachfolger. Entfernst du es aus der Liste, muß jeder Zugriff auf diese Position zu der von dir beschriebenen Fehlermeldung führen.

Wenn das letzte Element ein Leerstring ist, entfernst du es durch einen Aufruf von Delete(). In der nachfolgenden Zeile versuchst du dann dieses (nun ungültige) Listenelement einer anderen Liste hinzuzufügen.

Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:57 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz