Hallo,
ich hab mal eine Verständnisfrage.
Ich habe eine generische ObjectList:
ObjectList_sichtbare_Masken := TObjectList<TMaskeFeld>.Create(false);
.
In dieser Procedure wird aus der Liste gelöscht:
Delphi-Quellcode:
procedure Masken_ausblenden(akt_MaskID: String);
var
i : Integer;
MaskeFeld: TMaskeFeld;
begin
for MaskeFeld in ObjectList_sichtbare_Masken do
If MaskeFeld.NameID <> akt_MaskID then
begin
MaskeFeld.Visible := false;
i := ObjectList_sichtbare_Masken.IndexOf(MaskeFeld);
ObjectList_sichtbare_Masken.Delete(i);
end;
end;
Früher hatte ich keine generische ObjectList, sonder eine normale ObjectList
ObjectList_sichtbare_Masken := TObjectList.Create(false);
und hab so gelöscht:
Delphi-Quellcode:
procedure Masken_ausblenden(akt_MaskID: String);
var
i : Integer;
MaskeFeld: TMaskeFeld;
begin
for Pred(ObjectList_sichtbare_Masken.Count) downto 0 do
begin
MaskeFeld := TMaskeFeld(ObjectList_sichtbare_Masken.Items[i]);
If MaskeFeld.NameID <> akt_MaskID then
begin
MaskeFeld.Visible := false;
ObjectList_sichtbare_Masken.Delete(i);
end;
end;
end;
(grob aus dem Gedächtnis getippt - hab leider den originalen Code nicht mehr)
"Früher", also bei der normalen ObjectList musste man ja die for-Schleife rückwärts laufen lassen,
wenn man ein Element löschen will, da sich ja durch das Löschen die Anzahl ändert.
Aber warum brauch ich das bei der generischen ObjectList nicht mehr?
Ich kann es mir nur so erklären, dass ich in der Schleife direkt ein Object bekomme und nicht, wie früher, einen Index.