![]() |
TObjectList unterschiedliche Objekte erkennen?
Hallo,
ich speichere in einer TObjectList unterschiedliche Objekte ab. Meine Frage lautet nun, wie kann ich beim auslesen der Objekte erkennen, um welches Objekt es sich handelt? Die Objekte, welche ich in der List ablege, sind alle von einem anderen Objekt (TAuto) abgeleitet. Ich habe folgendese probiert:
Code:
Funktioniert aber nicht.
for i := 0 to ObjectList.Count - 1 do
begin Auto := TAuto(Result.Items[i]); if (Auto is TCabrio) then ShowMessage('Es ist ein Cabrio'); if (Auto is TCoupe) then ShowMessage('Es ist ein Coupe'); end; Wäre nett, wenn mir jemand bitte helfen könnte. Bin wohl noch nicht ganz ausgeschlafen ;). Vielen Dank. |
AW: TObjectList unterschiedliche Objekte erkennen?
Was bedeutet "funktioniert nicht"? Eigentlich sollte es, wenn ich nichts übersehen habe und die Daten auch wirklich stimmen.
|
AW: TObjectList unterschiedliche Objekte erkennen?
Zitat:
Delphi-Quellcode:
vs
ObjectList
Delphi-Quellcode:
?
Result
|
AW: TObjectList unterschiedliche Objekte erkennen?
Das heißt, dass er mir nicht erkennt, um welche Klasse es sich handelt. Obwohl ich in meine ObjectList ein TCabrio eingetragen habe, erkennt er mir hier
Code:
nicht, dass es sich um ein TCabrio Objekt handelt.
if (Auto is TCabrio) then
ShowMessage('Es ist ein Cabrio'); @Sir Rufo: Sorry, das heißt natürlich nicht Result sondern Objectlist. |
AW: TObjectList unterschiedliche Objekte erkennen?
Na gut, so gesehen. Auf jeden Fall zu wenig Infos.
|
AW: TObjectList unterschiedliche Objekte erkennen?
Zitat:
|
AW: TObjectList unterschiedliche Objekte erkennen?
Und zeigen Result und ObjectList auf dasselbe Objekt? Diese Frage von Sir Rufo scheint das Entscheidende zu sein.
|
AW: TObjectList unterschiedliche Objekte erkennen?
Ok, ich versuche es beispielhaft zu erklären.
Habe folgende Klassen: TAuto:
Code:
TCabrio:
TAuto = class(TObject)
private FHersteller: string; published property Hersteller: string read FHersteller write FHersteller; end;
Code:
TCoupe:
TCabrio = class(TAuto)
private FSitze: integer; published property FSitze: string read FSitze write FSitze; end;
Code:
TCoupe= class(TAuto)
private FSitze: integer; published property FSitze: string read FSitze write FSitze; end; Nun speichere ich Objekte in meiner TObjectlist:
Code:
Und hier möchte ich auselesen, um welches Objekt es sich handelt:
var: AutoListe: TObjectList;
Cabrio: TCabrio; Coupe: TCoupe: Auto: TAuto; AutoListe := TObjectList.Create; Auto := TAuto.Create; Auto.FHersteller := 'BMW'; Coupe:= TCoupe(Auto); Coupe.FSitze := 4; AutoListe.Add(Coupe); Auto := TAuto.Create; Auto.FHersteller := 'VW'; Cabrio:= TCabrio(Auto); Cabrio.FSitze := 2; AutoListe.Add(Cabrio);
Code:
Aber es wird mir keine ShowMessage-Box erzeugt, somit erkennt er mir auch nicht mein Objekt.
for i := 0 to ObjectList.Count - 1 do
begin Auto := TAuto(ObjectList.Items[i]); if (Auto is TCabrio) then ShowMessage('Es ist ein Cabrio'); if (Auto is TCoupe) then ShowMessage('Es ist ein Coupe'); end; |
AW: TObjectList unterschiedliche Objekte erkennen?
Dein Problem liegt hier:
Zitat:
Delphi-Quellcode:
Dies ist beispielhaft für jede Unterklasse von TAuto. Dann funktioniert es auch mit
Coupe := TCoupe.Create;
Coupe.FHersteller := 'BMW'; Coupe.FSitze := 4; AutoListe.Add(Coupe);
Delphi-Quellcode:
if Objectlist[i] is TCoupe then...
|
AW: TObjectList unterschiedliche Objekte erkennen?
Du erstellst die Objekte falsch. Versuch es mal so:
Delphi-Quellcode:
var: AutoListe: TObjectList;
Cabrio: TCabrio; Coupe: TCoupe: Auto: TAuto; AutoListe := TObjectList.Create; Coupe:= TCoupe.Create; Coupe.Hersteller := 'BMW'; Coupe.Sitze := 4; AutoListe.Add(Coupe); Cabrio := TCabrio.Create; Cabrio.Hersteller := 'VW'; Cabrio.Sitze := 2; AutoListe.Add(Cabrio); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:24 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