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!