![]() |
Delphi-Version: 10.3 Rio
Arrays
Hi,
ich arbeite momentan mit einer ListBox. Zu dieser habe ich eine Funktion geschrieben, die es mir erlaubt (erlauben sollte), Elemente zu löschen. Im Hintergrund habe ich einen Array, der zum ListenIndex die Daten festhält. Wird nun in der ListBox ein Element gelöscht, soll dieses ebenfalls (um später Probleme beim Speichern zu vermeiden) aus dem Array gelöscht werden. Dazu verwende ich einen zweiten Array, der die Werte mit Auslassung des zu löschenden Elements aufnimmt. -MyItems ist der Array, in dem die Daten gespeichert werden -_object ist die ListBox -_index ist der Index des ausgewählten Elements in der ListBox
Code:
An beschriebener Stelle bricht das Programm ab. Der Compiler zeigt so weit keine Fehler.
var
_array: TArray2; I1,I2,a: Integer; begin a := 0; _array := MyItems; for I1 := 0 to _object.Items.Count do begin if I1 <> _index then begin for I2 := 0 to 8 do begin _array[a, I2] := MyItems[I1, I2]; //Hier wird mir der Fehler angezeigt: Zugriffsverletzung bei Adresse ... end; a := a + 1; end; end; MyItems := _array; _object.Items.Delete(_index); Result := _object; Wenn ihr Ideen habt, immer her damit. Vielen Dank, Jacob. |
AW: Arrays
Da du ja so oder so schon eine ObjectListe zu haben scheinst, wäre hier VirtualStringTree echt einfacher.
Wenn das richtig aufgebaut ist, brauchst du dich um die Löschung quasi nicht kümmern. Das mit dem Array, oder den zwei Arrays, wird vorne und hinten nix. Du solltest den Titel ändern. |
AW: Arrays
Zitat:
Aber die Infos oben sollten beschreiben, was besser gemacht werden kann. |
AW: Arrays
Warum überhaupt sorum?
Die ListBox und auch andere ListenKomponenten, sowie TStringList, haben nicht umsonst eine Data/Object-Eigenschaft an den Items, wo man seine Daten verlinken/reintun kann, anstatt zu versuchen mehrere Listen synchron zu halten. |
AW: Arrays
a)Ich habe eine Liste, die /bzw. _Teile der Listendatensätze in einer .... angezeigt werden.
b)Tritt in der ... eine Löschanforderung für einen Datensatz auf, wird dieser Datensatz in der Liste gelöscht. gehe zu a) Gruß K-H |
AW: Arrays
Ich würde - wie schon beschrieben - die Objekte der Liste direkt in der Listbox referenzieren und beim Löschen das (dann ja bekannte) Objekt aus der Liste löschen. Sollten mehrere Items in einem Durchgang gelöscht werden, nicht vergessen von „hinten nach vorne“ zu iterieren, da durch das Delete die Elemente verschoben werden und dann die Indizes sowie „Count“ nicht mehr passen.
|
AW: Arrays
Zitat:
aber wenn du löschst, wann wird da auch der nächste Eintrag übersprungen. Wenn man sorum arbeitet, dann nehmen man eine der anderen Schleifen (z.B. WHILE) und darf beim Löschen den Index nicht hochzählen, also Delete ODER Index+1. |
AW: Arrays
Zitat:
|
AW: Arrays
Jo, weil es mehrere Voreile hat.
OK, bei verketteten Listen ist Reihenfolge egal, da geht man einfach der Kette entlang, wobei des hier in der Doppelkette vermutlich noch einfacher geht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:10 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