AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Listenindex überschreitet das Maximum (9).
Thema durchsuchen
Ansicht
Themen-Optionen

Listenindex überschreitet das Maximum (9).

Ein Thema von Mr Whoopee · begonnen am 16. Aug 2004 · letzter Beitrag vom 16. Aug 2004
Antwort Antwort
Seite 1 von 2  1 2      
Mr Whoopee

Registriert seit: 28. Jun 2004
73 Beiträge
 
#1

Listenindex überschreitet das Maximum (9).

  Alt 16. Aug 2004, 15:51
Hallo, ich mal wieder ,
ich möchte, dass ein Eintrag aus einer ListBox gelöscht wird.
Hier der Code:
Code:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
For i:=0 to ListBox1.Items.Count-1 do
    If ListBox1.Items[i]=schueler.Text then
    ListBox1.Items.Delete(i);
end;
Komischerweise sagt Delphi mir, wenn ich was löschen will:
Listenindex überschreitet das Maximum (9). Wenn ich jedoch das hier änder...
Code:
ListBox1.Items.Count-2
... auf -2, kann ich das letzte nicht löschen

Weiß jemand Rat?


Danke für alle Antworten, Whoopee.
  Mit Zitat antworten Zitat
Benutzerbild von Bowler
Bowler

Registriert seit: 8. Sep 2003
Ort: Bochum
148 Beiträge
 
Delphi XE7 Enterprise
 
#2

Re: Listenindex überschreitet das Maximum (9).

  Alt 16. Aug 2004, 15:54
Hm. Wäre die Frage, ob die Delete-Funktion die Count-Property aktualisiert, wenn sie ausgeführt wird. Denn ansonsten würde z.B. die Delete-Funktion aufgerufen, ab da ist dann ein Element weniger in der Liste. Wenn in diesem Fall Count nicht aktualisiert wird, sondenrn noch immer den Ausgangwert liefert, dann schiesst der am Schluss genau 1 Element über das Ende hinaus.

Habe leider gerade kein Delphi da, um das Probem zu testen.

Versuche dochmal, mit dem Debugger zu schauen, wie sich der Wert in Count verhält.

Gruß
Christian
Christian Rüsken
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Listenindex überschreitet das Maximum (9).

  Alt 16. Aug 2004, 15:55
Indem du ein Item löschst, veränderst du ja den Wert von Count. Nimm hierzu besser eine while-Schleife:
while ListBox1.Count > 0 do ListBox1.Items.Delete(0);
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: Listenindex überschreitet das Maximum (9).

  Alt 16. Aug 2004, 15:55
machs besser so:

wenn schuler.text in ListBox einmal vorkommt:
Delphi-Quellcode:
with ListBox1.Items do
  Delete(IndexOf(schuler.text));
allgemein Lösung:
Delphi-Quellcode:
with ListBox1.Items do
 while IndexOf(schuler.text) > -1 then
  Delete(IndexOf(schuler.text));
greetz
mytar
Francis Obikwelu
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

Re: Listenindex überschreitet das Maximum (9).

  Alt 16. Aug 2004, 15:56
Wenn du Delete(0) machst, dann wird der erste Eintrag gelöscht, und der vorher zweite Eintrag wird zum ersten (Index 0)!!!
Also:
Delphi-Quellcode:
i := 0;
while i < ListBox1.Items.Count do
  if ListBox1.Items[i] = schueler.Text then
    ListBox1.Items.Delete(i)
  else
    Inc(i);
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Listenindex überschreitet das Maximum (9).

  Alt 16. Aug 2004, 15:57
Zitat von Bowler:
Wenn in diesem Fall Count nicht aktualisiert wird, sondenrn noch immer den Ausgangwert liefert, dann schiesst der am Schluss genau 1 Element über das Ende hinaus.
Genau das wird passieren. Delphi guckt nicht jedes Mal nach, ob die Abbruchbedingung gleich geblieben ist, sondern sie bleibt während der Schleife wie am Anfang! Ansonsten wäre es ja schon fast eine while-Schleife
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Listenindex überschreitet das Maximum (9).

  Alt 16. Aug 2004, 15:58
Zitat von Stevie:
Delphi-Quellcode:
i := 0;
while i < ListBox1.Items.Count do
  if ListBox1.Items[i] = schueler.Text then
    ListBox1.Items.Delete(i)
  else
    Inc(i);
Und genau DAS ist auch Murks
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Mr Whoopee

Registriert seit: 28. Jun 2004
73 Beiträge
 
#8

Re: Listenindex überschreitet das Maximum (9).

  Alt 16. Aug 2004, 15:59
Zitat von Bowler:
Hm. Wäre die Frage, ob die Delete-Funktion die Count-Property aktualisiert, wenn sie ausgeführt wird. Denn ansonsten würde z.B. die Delete-Funktion aufgerufen, ab da ist dann ein Element weniger in der Liste. Wenn in diesem Fall Count nicht aktualisiert wird, sondenrn noch immer den Ausgangwert liefert, dann schiesst der am Schluss genau 1 Element über das Ende hinaus.

Habe leider gerade kein Delphi da, um das Probem zu testen.

Versuche dochmal, mit dem Debugger zu schauen, wie sich der Wert in Count verhält.

Gruß
Christian
Das ist eine gute überlegung - danke! Ich müsste nur dach der schleife das item löschen


Zitat von dizzy:
Indem du ein Item löschst, veränderst du ja den Wert von Count. Nimm hierzu besser eine while-Schleife:
while ListBox1.Count > 0 do ListBox1.Items.Delete(0);
Auch nicht schlecht

Zitat von mytar:
machs besser so:

Delphi-Quellcode:
with ListBox1.Items do
 Delete(IndexOf(schuler.text));
greetz
mytar
So habe ich es dann gemacht funzt sauber danke danke danke


DANKE @ all
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Listenindex überschreitet das Maximum (9).

  Alt 16. Aug 2004, 15:59
oder vielleicht gleich ListBox1.Items.Clear;

\\edit: Ach jo, du willst ja selektiv löschen
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

Re: Listenindex überschreitet das Maximum (9).

  Alt 16. Aug 2004, 16:02
Zitat von dizzy:
Zitat von Stevie:
Delphi-Quellcode:
i := 0;
while i < ListBox1.Items.Count do
  if ListBox1.Items[i] = schueler.Text then
    ListBox1.Items.Delete(i)
  else
    Inc(i);
Und genau DAS ist auch Murks
Und warum bitte????
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz