Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Schleife unterbrechen?


ralfi - Fr 23.05.03 13:43
Titel: Schleife unterbrechen?
Hallo!
Ich habe in einer ListBox einige Links. Diese Links werden in einer Schleife mit einem NMHTTP-Comp gesendet, die Ergebnisse (body) werden dann gefiltert und sortiert etc. Das Problemm ist, das wenn ich ein ListBox-Item lösche, kommt eine Fehlermeldung: '' is not a valid intege value
obwohl ich die Schleife rückwährts mache:


Quelltext
1:
2:
for i := ListBox1.Items.Count - 1 downto 0
...


Nach der Meldungs ist die Schleife komplett unterbrochen. Wie kann ich das verhindern? Im schlimmsten Fall: kann ich die ErrorMessages irgendwie abfangen? Dann könnte ich eine Notstart-Funktion erstellen, die die Schleife nach dem löschen wieder aktivieren würde. Für jeden Tip bin ich dankbar!


Ex0rzist - Fr 23.05.03 14:09
Titel: Re: Schleife unterbrechen?
ralfi hat folgendes geschrieben:
Das Problemm ist, das wenn ich ein ListBox-Item lösche, kommt eine Fehlermeldung: '' is not a valid intege value


Dieser Fehler liegt bestimmt nicht an deinem Schleifenkopf. Wo taucht es denn auf?


Terra23 - Fr 23.05.03 14:14

Wie wäre es mit einer Abfrage:


Delphi-Quelltext
1:
If ListBox1.Items.Count>0 Then Tue was..                    


Deine Meldung heißt ja nichts weiter, als das "leer" (nichts) kein gültiger Integer-Wert ist. Den mußt du abfangen. Es darf nicht leer sein.


ralfi - Fr 23.05.03 14:19

Denke für ihre Tips. Das Problemm ist, die ListBox ist nicht leer! Wenn ich ein Item lösche, sind noch mehrere drin.
@Ex0rzist
Die Meldung taucht auf in Paar sekunden nach dem löschen. :?


Luncustaf - Fr 23.05.03 15:42

hi,

durchläufst du die listbox nachdem du gelöscht hast?

vllt musst du den itemindex händisch um eins zurücksetzen da du ja eines herrauslöschst oder du musst die listbox refreshen.

weis aber nicht genau obs daran liegt probier mal nach der löschenfuktion ein Listbox1.itemindex := listbox1.itemindex-1;



gr€€tz


alexschultze - So 25.05.03 07:54

der ItemIndex ist das markierte Feld! Falls du die gesamtzahl aller elemente haben willst solltest du
memo1.lines.count (oder ähnlich) probieren.
weiterhin -1 zu 0 ist incrementierent, also TO, downto ist in meinen Augen fehl am Platz, es wird ja mehr nicht weniger.

du könntest die gesamte schleife bzw. den bereich in dem du den fehler vermutest in einen TRY EXCEPT Block legen.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
TRY
for inti_the_integer:=000 to 123 do ..
showmessage('ouch');
end;

EXCEPT
showmessage('Es ist ein Fehler aufgetreten!');

END;