AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Remove in Generic TObjectList

Ein Thema von SteffenSchm · begonnen am 3. Nov 2008 · letzter Beitrag vom 3. Nov 2009
 
SteffenSchm

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

Remove in Generic TObjectList

  Alt 3. Nov 2008, 11: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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 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 by Thomas Breitkreuz