![]() |
Fehlermeldung: Listenindex überschreitet das Maximum(1)
Hallo,
Wenn ich beim beim Open- und Save-Dialog auf Abbrechen klicke kommt immer diese Fehlermeldung. Wie kann ich das beheben? Quellcode:
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var List: TStrings; begin List := TStringList.Create; try if SaveDialog1.Execute then List.LoadFromFile(SaveDialog1.FileName); if List.Count>0 then Edit1.Text:=List[0]; Edit2.Text:=List[1]; Edit3.Text:=List[2]; Edit4.Text:=List[3]; Edit5.Text:=List[4]; Edit6.Text:=List[5]; Edit7.Text:=List[6]; finally List.Free; end; end; |
AW: Fehlermeldung: Listenindex überschreitet das Maximum(1)
Ohne begin/end zu setzen, bezieht sich das if immer nur auf eine Zeile. Da steht also sowas:
Delphi-Quellcode:
Jetzt mal schöner gruppiert. Mit begin/end geht's so:
if SaveDialog1.Execute then
List.LoadFromFile(SaveDialog1.FileName); if List.Count>0 then Edit1.Text:=List[0]; Edit2.Text:=List[1]; Edit3.Text:=List[2];
Delphi-Quellcode:
if (Bedingung)
begin // Anweisungen // jetzt auch mehr als eine Zeile end |
AW: Fehlermeldung: Listenindex überschreitet das Maximum(1)
Woher weißt du, dass in der Liste immer mindestens 7 Einträge vorhanden sind? Wenn du auf abbrechen drückst, könnte es sein, dass schon ein Eintrag in der Liste ist und er dann an der Stelle
Delphi-Quellcode:
abschmiert.
Edit2.Text:=List[1];
Setz doch zum Test noch ein
Delphi-Quellcode:
hinter dein Create der Liste um sicherzustellen, dass nichts in deiner Liste steht.
List.Clear;
Des Weiteren würde ich auf die gewünschte Anzahl an Einträgen prüfen und nicht nur auf > 0. Prüfe, ob mindestens 7 Einträge in der Liste sind, damit beim Auslesen der Liste keine Fehler auftreten. Edit: Das was JFHeins gesagt hat, kommt natürlich noch dazu. Hab ich total über"lesen". |
AW: Fehlermeldung: Listenindex überschreitet das Maximum(1)
Mit begin/end funktioniert das.
Danke. |
AW: Fehlermeldung: Listenindex überschreitet das Maximum(1)
Die Datei hat keine 7 Zeilen, deshalb greift z.B. List[6] ins Leere.
Verwende einfach folgende Funktion:
Delphi-Quellcode:
PS: deine Vorgehensweise ist unsicher! Probier mal aus was passiert wenn in der Datei nur 5 Zeilen sind.
// 1. Zeile eine Stringliste auslesen und Eintrag in Liste löschen
function GetFirstLine(list:TStrings):string; begin if list.Count > 0 then begin result := list[0]; list.Delete(0); end else result := 0; end; procedure TForm1.Button4Click(Sender: TObject); var List: TStrings; begin List := TStringList.Create; try if SaveDialog1.Execute then List.LoadFromFile(SaveDialog1.FileName) else Exit; Edit1.Text:=GetFirstLine(List); Edit2.Text:=GetFirstLine(List); Edit3.Text:=GetFirstLine(List); Edit4.Text:=GetFirstLine(List); Edit5.Text:=GetFirstLine(List); Edit6.Text:=GetFirstLine(List); Edit7.Text:=GetFirstLine(List); finally List.Free; end; end; |
AW: Fehlermeldung: Listenindex überschreitet das Maximum(1)
Ihr braucht keine Vorschläge mehr zu machen.
Es gibt jetzt keine Probleme mehr! Mit begin und end in der IF-Schleife gibt es keine Fehlermeldung mehr :):thumb: |
AW: Fehlermeldung: Listenindex überschreitet das Maximum(1)
Laß das Exit weg.
Stattdessen ein Begin-End um alles (LoadFromFile bis hinter's Edit7.Text) drumrum ist doch auch ganz nett. Außerdem: - Warum wird eigentlich scheinbar ein SaveDialog für's Laden verwendet? - Ich würde dir empfehlen den Komponenten ein paar orgentliche Namen zu geben, damit man weiß was was ist. - Etwas Fehlerbehandlung kann nie schaden. (angefangen bei Try-Except, über eine Fehlermeldung, wenn die Datei nicht geladen wurde) - Ich empfehle dir auch mal das Lesen/anschauen eines Tutorial für den Debugger und vorallem dessen Verwendung. Zitat:
Und wenn du beim Testen auch mal den Datei-Dialog mit "Abbechen" oder mit einer zu kleinen Datei ausprobiert hättest, dann wäre dir dann auch das fehlende Begin-End aufgefallen.
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var List: TStrings; begin if OpenDialog1.Execute then begin List := TStringList.Create; try List.LoadFromFile(SaveDialog1.FileName); if List.Count = 7 then begin // oder > 6 bzw. >= 7 Edit1.Text := List[0]; Edit2.Text := List[1]; Edit3.Text := List[2]; Edit4.Text := List[3]; Edit5.Text := List[4]; Edit6.Text := List[5]; Edit7.Text := List[6]; end else ShowMessage('Ungültige Datei.'); finally List.Free; end; end; end; Aber daß es wenigstens einen Ressourcenschutzblock (Try-Finally) gab, welcher auch noch richtig verwendet wurde, ist schonmal ein guter Anfang. :thumb: |
AW: Fehlermeldung: Listenindex überschreitet das Maximum(1)
Zitat:
![]() MfG Dalai |
AW: Fehlermeldung: Listenindex überschreitet das Maximum(1)
Zitat:
|
AW: Fehlermeldung: Listenindex überschreitet das Maximum(1)
Zitat:
Delphi-Quellcode:
würdest einen Fehler erhalten, weil 0 ein Integer ist, Result aber ein String.
result := 0;
Also
Delphi-Quellcode:
Result := '0';
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 Uhr. |
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