Problem mit Schleife
Guten Morgen,
ich habe ein Problem mit folgender Schleife. Also, zuerst prüfe ich wieviele Einträge in meiner listbox stehen. Danach setze ich die länge für mein Array fest und zuletzt möchte ich das dem Array in der Schleife die Namen der Einträge aus der Listbox zugewiesen werden. Aus irgendeinem Grund, kommt eine Exception mit der Meldung Zugriffsverletzung... Was ich besonders seltsam finde ist, dass es manchmal (in 5% der Fälle) funktioniert. Das weiß ich weil ich es schon ein paar mal getestet hab weil ich der Meinung war das der Code so funktionieren müsste...
Delphi-Quellcode:
MfG
procedure TTA_Daten_HinzuDLG.Button3Click(Sender: TObject);
var dstnum,y,i,sch:integer; dstlistar:array of string; begin dstnum:=dstlist.Items.Count; setlength(dstlistar,dstnum); y:=1; sch:=0; for i:=1 to dstnum do begin dstlistar[y]:=dstlist.Items.Strings[sch]; y:=y + 1; sch:=sch + 1; end; label3.Caption:=dstlistar[1]; end; Fridolin |
Re: Problem mit Schleife
Delphi-Quellcode:
Auch dynamische Array fangen mit dem Index 0 an, genau wie die Items Deiner Listbox.
procedure TTA_Daten_HinzuDLG.Button3Click(Sender: TObject);
var dstnum,i:integer; dstlistar:array of string; begin dstnum:=dstlist.Items.Count; setlength(dstlistar,dstnum); for i:=0 to dstnum -1 do dstlistar[i]:=dstlist.Items.Strings[i]; label3.Caption:=dstlistar[1]; end; Der Endwert der Items der Listbox ist items.count -1. Grüße Klaus |
Re: Problem mit Schleife
Hallo Fridolin,
ein dynamisches Array beginnt mit Index 0 genau wie die Items einer Listbox. Das hier:
Delphi-Quellcode:
würde ich so schreiben:
y:=1;
sch:=0; for i:=1 to dstnum do begin dstlistar[y]:=dstlist.Items.Strings[sch]; y:=y + 1; sch:=sch + 1; end;
Delphi-Quellcode:
Edit: Da es afaik i-1 heißen muss (weil sch um 1 niedriger ist) und ich bei 1 anfange, da er auf den vorigen Index zugreifen möchte, sende ich meinen Beitrag auch ab. ;) ABer ich muss zugeben, verstanden habe ich noch nicht, was der Code soll. :gruebel:
for i := 0 to dstnum - 1 do
begin dstlistar[i] := dstlist.Items.Strings[i]; end; Edit 2: Achso 1:1 übertragen, dann hat Klaus recht, hab's angepasst. |
Re: Problem mit Schleife
Zitat:
|
Re: Problem mit Schleife
@Matze: Du greifst trotzdem bei deinem beiden Codestücken auf das dynamische Array von 1..Count zu - entgegen deinen Aussagen.
/EDIT: Ok, nun nur noch bei deinem ersten Beispiel... /EDIT2: Achso, erstes ist ein Zitat, nun, dann ist das richtig falsch - wobei richtig sich hier auf die Wiedergabe von Matze bezieht. @Fridolin: Schalte mal bitte unter Projekt->Optionen->Compiler die Bereichsprüfung ein und erstelle dein Projekt komplett neu. Dann würdest du bei Zugriffe auf falsche Elemente benachrichtigt werden und kannst sowas leichter finden. |
Re: Problem mit Schleife
Ja, ich weiß. Es hat einmal bei Index 1 angefangen, das andere mal bei 0, daher dachte ich zuerst, er möchte etwas verschieben. Wenn er nämlich in der Schleife auf den vorigen Index zugegriffen hätte (so habe ich seinen Code zuerst interpretiert), dann wäre die 1 schon richtig. Mir kam aber dann, was er eigentlich möchte. *g*
Edit: Was verursache ich wieder für Dikusionen am frühen morgen. :roll: Es ist alles in Ordnung, Klaus hat's von Anfang an korrekt gemacht und ich habe mich zuerst geirrt. Ruhe jetzt. :mrgreen: Edit 2: Der obere Code-Snippet ist doch 1:1 zitiert und stammt nicht von mir. :wall: |
Re: Problem mit Schleife
Wenn Du das ganze in der IDE laufen lässt, dann bekommst Du die Stelle angezeigt, an der es knallt.
Davon mal abgesehen, ist mir nicht ganz klar, was du mit den lokalen Variablen y und sch bezwecken willst, wenn Du das Ganze auch mit i bzw. i-1 machen kannst. Und ein Array fängt bei 0 an; nicht bei 1. |
Re: Problem mit Schleife
Super, danke.... :dp:
Hab ich garnich dran gedacht :wall: Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:26 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