Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   EStringListError (https://www.delphipraxis.net/113506-estringlisterror.html)

Spynx 8. Mai 2008 22:12


EStringListError
 
Hallo,
ich bin absoluter Delphi-Depp und sitze hier schon seit Stunden an der selben Stelle fest... Ich komme einfach nicht auf den Fehler. Vielen Dank für jegliche Hilfe!

Im Project Project1.exe ist eine Exception der Klasse EStringListError aufgetreten. Meldung: 'Der Index der Liste überschreitet das Maxiumum (2). Prozess wurde angehalten. Mit Einzelne Anwendung oder Start fortsetzen.


Delphi-Quellcode:
procedure TForm1.Button21Click(Sender: TObject);
var i:integer; dummy:string;
begin

    for i:=0 to (listbox2.items.count-1) do begin
    dummy:=ListBox2.Items[i];
    listbox1.items.add(dummy);
    ListBox2.Items.Delete(i);
    label3.caption:='Gesamt:' + ' ' + inttostr(ListBox1.Items.Count);
    label6.caption:='Gesamt:' + ' ' + inttostr(ListBox2.Items.Count);
    edit3.text:='';
    edit4.text:='';
    end;
    end;

HalloDu 8. Mai 2008 22:14

Re: EStringListError
 
Nabend,

Wenn du innerhalb der Schleife löscht, veringert das doch die Länge oder nicht, was dann dazu führt das du nachher auf ein Element zugreifen willst das nicht vorhanden ist..., obwohl Count sich dann ja auch veringert sollte, aber da weiß ich nicht genau, ob er den Endwert jedes Mal neu bezieht, geb ich erstmal meinen Senf dazu. Anstatt die Elemente einzeln zu löschen, versuch doch einfach die Listbox2 danach zu clearen.

Hoffe geholfen zu haben,
HalloDu

mkinzler 8. Mai 2008 22:15

Re: EStringListError
 
Oder lass die Schleife in die andere Richtung laufen.

Spynx 8. Mai 2008 22:19

Re: EStringListError
 
:wall:

Dankeschön, das wars! Nach der Schleife Alles clearen hat das Problem behoben...
Fehler wurde in der Dummy:=Listbox2.items[i]zeile angegeben...


Vielen Dank!!! :drunken:

FAlter 8. Mai 2008 22:22

Re: EStringListError
 
Hi,

Die Elemente kopieren geht mit

Delphi-Quellcode:
ListBox2.Items.Assign(ListBox1.Items);
Siehe Delphi-Referenz durchsuchenTPersistent.Assign

Über Delphi-Referenz durchsuchenClear (haben viele Komponenten) löschst du den Inhalt.

Und in der Schleife die Edits jedesmal zu leeren (was übrigens auch mit Delphi-Referenz durchsuchenClear geht) ist irgendwie sinnlos, oder? Einmal leeren reicht doch auch.

Und bitte mach nicht so eine Smiley-Flut.

Mfg
FAlter

HalloDu 8. Mai 2008 22:23

Re: EStringListError
 
[OT] Ach, was Smilieflut angeht hatten wir schon schlimmere. :stupid: [/OT]

Spynx 8. Mai 2008 22:38

Re: EStringListError
 
Leider habe ich die Selbe Fehlermeldung auch an einer 2. Stelle (diesmal mit dem Wert 2) wobei ich jedoch nichts lösche...

Zur Erläuterung: Mein Programm soll aus einem Spielerpool selbst einigermaßen faire Teams erstellen, und diese später in einen Turnierbäume eintragen. Dabei gibt man eine pro Spieler eine Wertung ein (max. 4 Stellige Zahlen) und einen Spielernamen. Vor die Spielerwertung werden automatisch die entsprechende Anzahl Nullen gestellt. Nun soll das Programm die Spielerwertung durchgehen, per zufall einen der Spieler mit der besten Wertung bestimmen. Hinterher soll diesem "besten" Spieler dann ein schlechter Spieler nach dem selben prinzip zugeordnet werden.


Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);
var letzter,Spieler1,Spieler2,i,i2,i3,i4,gleichcounter,rest,skill,skill2,choose:integer; check,check2,choosenname,choosenname2,choosenname3:string;
begin
 gleichcounter:=0;
if ListBox2.Items.Count mod strtoint(edit5.text) = 0 then begin

  choosenname2:='';
  choosenname:='';
  gleichcounter:=0;
  status.caption:='Spielerzahl passt';
  for i:=0 to (ListBox2.Items.Count)
     do begin
        [color=#ff001f]check:=listbox2.items[i-1];[/color]  //<--hier wird der Fehler angezeigt - ersten Namen samt Wertung holen
        for i2:= 1 to 4 do
        skill:= skill + strtoint(check[i2]); // Wertung isolieren

        if i<listbox2.items.count-1 then
        begin
            check2:=listbox2.items[i+1]; // Wertung des nächsten auslesen
            for i3:= 1 to 4 do
            skill2:= skill2 + strtoint(check2[i3]);  // Wertung isolieren

            if skill=skill2 then            //Wertung vergleichen
            gleichcounter:=gleichcounter+1    // Anzahl gleicher Wertungen
            else
            begin                        // sobald der nächste Spieler eine andere Wertung hat, wird unter jenen mit gleicher Wertung gelost
                  choose:=random(gleichcounter)+1;
                  choosenname:=ListBox2.Items.Strings[choose-1]; //choosenname ist Wertung + Name des auserwählten

                  for i4:=6 to length(choosenname) do      // Auserwählten Name wird von Wertung isoliert
                  choosenname2:= choosenname2 + choosenname[i4];


                                         


 //........


                 end;
            end;
     end;



  end
  else
  status.caption:='error';
  showmessage('Unpassende Spieleranzahl!');

end;
Sry für die Smileyflut...

BUG 8. Mai 2008 22:50

Re: EStringListError
 
Delphi-Quellcode:
// ...
  for i:=0 to (ListBox2.Items.Count)
     do begin
        check:=listbox2.items[i-1]; //<--hier wird der Fehler angezeigt - ersten Namen samt Wertung holen
// ...
Was passiert den im ersten Schleifendurchlauf, wenn i = 0 ist :gruebel:
:arrow: Es wird auf listbox2.items[-1] zugegriffen ...

MfG,
Bug

Spynx 8. Mai 2008 22:53

Re: EStringListError
 
ups,Entschuldigung, da habe ich rumprobiert und das nicht wieder umgeändert...

Nichtzdestotrotz besteht der Fehler weiterhin bei
Delphi-Quellcode:
[check:=listbox2.items[i]

BUG 8. Mai 2008 22:59

Re: EStringListError
 
Delphi-Quellcode:
// ...
  for i:=0 to (ListBox2.Items.Count)
     do begin
        check:=listbox2.items[i]; //<--hier wird der Fehler angezeigt - ersten Namen samt Wertung holen
// ...
Was passiert den im letzten Schleifendurchlauf, wenn i = ListBox2.Items.Count ist :gruebel:
:arrow: Es wird auf listbox2.items[ListBox2.Items.Count] zugegriffen obwohl es mit Null angefangen wird zu Zählen und damit ListBox2.Items.Count-1 das letzte Element ist ...

MfG,
Bug


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:22 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