![]() |
"Fehler bei der Bereichsprüfung" in "SetLengt
Nun zu meiner Frage:
Ich habe folgenden Code
Delphi-Quellcode:
und er wirft mir eine Exception an den Kopf, wenn er die Zeile 5 (mit dem x versehen) erreicht:
function TfrmManager.getNames: TStrArr; // TStrArr = array of string
var i : Integer; begin {x} SetLength(Result, lwList.Items.Count - 1); for i := 0 to lwList.Items.Count - 1 do begin Result[i] := lwList.Items[i].Caption; end; end; "Fehler bei der Berreichsprüfung". lwList ist eine ListView und enthält keine Einträge. [OOPs]Sry, aber dummer Bug ;) Einfach das "-1" weglassen... Warum fällt mir das erst jetzt auf? Wahrscheintlich deswegen: Zitat:
|
Re: "Fehler bei der Bereichsprüfung" in "SetL
Entschuldige, dass ich mich melde, auch wenn Du glaubst, dass Dir Dein Fehler selbst aufgefallen ist: Was soll Deine Funktion eigentlich machen?
Zitat:
Irgendetwas dürfte daran doch wohl falsch sein... Trotzdem guten Rutsch! Jürgen |
Re: "Fehler bei der Bereichsprüfung" in "SetL
SetLength muss man die richtige Größe des Arrays übergeben und nicht mit -1. Richtig ist also:
SetLength(Result, lwList.Items.Count); Florian |
Re: "Fehler bei der Bereichsprüfung" in "SetL
Hi Jürgen.
Naja. Es ist eine Prozedur. Und Prozeduren werden ja bekanntlich mehrmals aufgerufen ;) Nur ist es so, dass nach dem Programmstart keine Einträge vorhanden sind. Und wenn ich einen Eintrag erstellen will, dann wird die Methode aufgerufen ;) Sie hat einen Sinn bei mehr als 0 Einträgen :D @ Florian: Steht schon so im Edit drinne ;) War ein Denkfehler ^^ |
Re: "Fehler bei der Bereichsprüfung" in "SetL
Habs grade gemerkt ... hatte das Edit überlesen :wall:
|
Re: "Fehler bei der Bereichsprüfung" in "SetL
Zitat:
Zitat:
2. Es ist gleichgültig, ob sie einmal oder mehrmals aufgerufen wird. (Es ist möglich, auch eine Prozedur nur einmal aufzurufen.) 3. Die Länge ordnest Du der "lokalen" Variablen Result zu, aber nicht einer Variablen des Formulars o.ä. 4. "Und wenn ich einen Eintrag erstellen will, dann wird die Methode aufgerufen" und erzeugt ein neues Array und überträgt erneut alle Listview-Captions? Sicher, ich muss nicht verstehen, was Du machen willst; aber vielleicht denkst Du noch einmal darüber nach, ob da nicht irgendeine gravierende Seltsamkeit drin steckt. Jürgen PS. Unter Delphi (Win32) erleichtert die TStringList die Arbeit mit String-Arrays ungemein, weil sie z.B. die Speicherzuordnung selbst vornimmt, mit Add() bzw. Insert() einfach Einträge ergänzen kann und mit IndexOf() suchen kann. Wäre das nicht etwas für Dich? |
Re: "Fehler bei der Bereichsprüfung" in "SetL
Hi Jürgen.
Entschuldige, aber ich habe dich falsch verstanden ;) Ich habe gedacht du wolltest darauf hinaus, dass es doch unsinnig ist, wenn es keine Items gibt. (Teilweise stimmt das schon) Du hast recht ;) Lieber eine Globale Variable einrichten. Und ich habe (bisher) nicht TStringList verwendet, weil das an sich ja =array of string ist. Aber ich habe nicht an "IndexOf" gedacht. Das ist natürlich sinnvoll! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 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