Einzelnen Beitrag anzeigen

SteffenSchm

Registriert seit: 2. Nov 2004
Ort: Herzogenaurach
84 Beiträge
 
Delphi 10.3 Rio
 
#1

Remove in Generic TObjectList

  Alt 3. Nov 2008, 10:42
Hallo alle zusammen,

nachdem ich mir Delphi2009 gekauft und installiert habe, wollte ich die generischen Listen der neuen Version nutzen. Ich habe also die Objectlisten (TObjectList) durch generische (z.B. TObjectList<TRecord>) ersetzt. Damit wollte ich mir Typkonvertierungen beim Zugriff auf Elemte der Liste ersparen.

Der Compiler hat das ganze auch ohne Fehlermeldung compiliert. Als ich aber in meinem Programm den Menüpunkt zum Löschen eines einzelnen Elementes der Liste aufgerufen habe, kam eine AV. Das Löschen sollte über Remove erfolgen.

Das prinzipielle Problem habe ich in folgendem Testprogramm dargestellt. Bei Aufruf von Remove innerhalb Button2Click kommt die AV. Löschen über Delete funktioniert dagegen.

Delphi-Quellcode:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Generics.Collections, Dialogs, StdCtrls;

type
  TForm3 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  TRecord = class(TObject)
    Name:String;
    X,Y:Double;
  end;

var
  Form3: TForm3;
  RecLst : TObjectList<TRecord>;

implementation
{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
var
  I: Integer;
  Rec:TRecord;
begin
  for I := 0 to 4 do
  begin
    Rec:=TRecord.Create;
    Rec.X:=Random;
    Rec.Y:=Random;
    RecLst.Add(Rec);
  end;
end;

procedure TForm3.Button2Click(Sender: TObject);
var
  Rec:TRecord;
begin
  Rec:=RecLst[0];
  RecLst.Remove(Rec);
end;

initialization
  RecLst :=TObjectList<TRecord>.Create;
finalization
  RecLst.Free;
end.
Kann mir jemand sagen, wo der Fehler liegt. Habe ich etwa das ganze Thema mit den Generics falsch verstanden?

Bin für jeden Hinweis dankbar!
Steffen
  Mit Zitat antworten Zitat