![]() |
Array mit Objekte | Element überschreiben
Hallo Community,
ich habe mehrere Objekte erstellt und diese ín einen dafür geeigneten Array gelegt.
Code:
Nun möchte ich ein Objekt, welches sich mitten im Array befindet löschen.
var
User: array of CKunde; begin SetLength(User, Length(User) + 1); User[High(User)] := CKunde.Create; User[High(User)].display := 'Kunde'+inttostr(High(User)); lb_auswahl.items.add(User[High(User)].display); //lb_auswahl = ListBox end; Damit der Array natürlich lückenlos bleibt, sollen alle sich danach befindlichen Objekte im Array um eins nach vorne rutschen und zum Schluß wird der Array um eins verringert. Hier stoße ich aber leider auf das Problem, dass ich scheinbar folgendermaßen das Objekt nicht kopieren und löschen kann/darf:
Code:
begin
User[lb_auswahl.ItemIndex] := User[length(User)-1]; //Zu löschendes Objekt einfach testweise mit dem letzen Objekt überschreiben (Fehler?) User[length(User)-1].Destroy; //letztes Objekt löschen SetLength(User, Length(User)); //Array jetzt um eins verringern. end; |
AW: Array mit Objekte | Element überschreiben
Damit man den Code besser lesen kann, nimm bitte nächstes Mal den DELPHI-Tag (der Römerhelm).
Welcher Fehler kommt denn? Sonst probier mal folgendes:
Delphi-Quellcode:
procedure loescheAktuellen;
begin if lb_auswahl.ItemIndex <= high(User) then begin User[lb_auswahl.ItemIndex].free;//nicht vergessen das aktuelle Objekt zu löschen (immer mit free) User[lb_auswahl.ItemIndex] := User[high(User)]; //User[length(User)-1].free; //das letzte Objekt willst du gar nicht löschen, es soll ja an der Stelle des zu löschenden Objektes weiterleben SetLength(User, Length(User)-1);//hier fehlte die -1 end else ShowMessage('Der ItemIndex ist zu groß'); end; so sollte es funktionieren, aber keine Garantie |
AW: Array mit Objekte | Element überschreiben
Immer wieder der gleiche Fehler!
Delphi-Programmierer greifen viel zu oft zum Array anstatt eine Liste zu verwenden. Aus einer Liste kann man völlig problemlos ein Element entfernen. Bei einem Array entsteht dagegen ein Loch, dass durch eine Verschiebeoperation gefüllt werden muss. Bei einer Liste kann man auch völlig problemlos zwischendrin ein Element einfügen. Eine Liste ist eine höherwertige Datenstruktur, während ein Array eine primitive Datenstruktur ist. Intern kann man eine Liste auf einem Array aufbauen; für den Verwender der Liste ist dies aber ohne Belang. Damit sollte klar sein, dass man höherwertige Datenstrukturen benützen sollte. Im konkreten Fall ist dies die Klasse TObjectList. Ausserdem kann man auch die Klasse TStrings (bzw. alle Ableitungen von TStrings) benützen um Objekte zu speichern:
Delphi-Quellcode:
var
kunde : CKunde; begin kunde := CKunde.Create; kunde.display := 'Kunde'+inttostr(lb_auswahl.items.Count+1); lb_auswahl.items.AddObject(kunde.display, kunde); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:32 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