![]() |
Objekte in Listen und deren Eigenschaften
Hi,
wenn ich so 5 Objekte erstelle und in eine TList packe:
Delphi-Quellcode:
und hinterher den Namen jedes einzelnen abfrage, dann haben alle den Namen "test5".
private liste:Tlist;
//... procedure xyz; var test:ObjetktTyp; i: integer; begin for i:=1 to 5 do begin test:=ObjektTyp.create; test.name:='test'+inttostr(i); liste.add(test); end; end; Aber wie mir in dem Thread noch erklärt wurde ( ![]() Wie bekomme ich denn unendlich viele Instanzen hin, mit jeweils unterschiedlichen Werten in den Attributen? |
Re: Objekte in Listen und deren Eigenschaften
versuche anstelle von
Delphi-Quellcode:
lieber mal
test:=ObjektTyp.create;
Delphi-Quellcode:
test := new (ObjectTyp);
|
Re: Objekte in Listen und deren Eigenschaften
Zitat:
|
Re: Objekte in Listen und deren Eigenschaften
@RavenIV: Wer sagt denn, dass ObjektTyp keine Klasse ist? Sonst müsste er ja schon beim Create meckern...
@TheAn00bis: Dann zeig mal bitte wie du die Namen ausgibst - der gepostet Code ist in Ordnung. |
Re: Objekte in Listen und deren Eigenschaften
Zitat:
So gebe ich die Namen aus:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; test:ObjetktTyp; begin for i:=0 to liste.count-1 do begin test:=liste[i]; showmessage(test.namen); end; end; oder so:
Delphi-Quellcode:
for i:=0 to liste.count-1 do begin
showmessage(TObjektTyp(Liste[i]).name); end; |
Re: Objekte in Listen und deren Eigenschaften
Für Objekte gibt es übrigens die Container-Klasse TObjectList, die von TList abgeleitet ist.
|
Re: Objekte in Listen und deren Eigenschaften
@TheAn00bis: Auch dieser Teil ist fehlerfrei, steht das wirklich ganz genau so bei dir im Quelltext? Vielleicht hast du ja irgendwo nur einen Tippfehler.
|
Re: Objekte in Listen und deren Eigenschaften
Zitat:
Zitat:
Nein, ist nicht der genaue Quelltext, da ich das allgemein halten wollte. (damit das Problem schneller klar wird) Hier der Quelltext um den es geht:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var karte:Tkarte; begin karte:=Tkarte.create(edit1.text,edit2.text); liste.Add(karte); end; procedure TForm1.Button2Click(Sender: TObject); var i: integer; karte:Tkarte; begin for i:=0 to liste.count-1 do begin karte:=liste[i]; showmessage(karte.gibfrage); end; end; procedure TForm1.FormCreate(Sender: TObject); begin liste:=Tlist.create(); end; end. Hierbei habe ich natürlich edit1 und 2.text vor jedem Klicken geändert. Wenn ich dann auf button2 klicke, erscheint in jedem Fenster dennoch das gleiche. edit: Achja, der erste "create"-Parameter setzt die Variable, die durch "GibFrage" ausgegeben wird. |
Re: Objekte in Listen und deren Eigenschaften
auch das sieht richtig aus *g*
Hast du eventuell im Constructor von TKarte den Namen fest eingetragen (eventuell zum testen und dann nicht zurück geändert). noch nen kleiner Tipp: anstelle von
Delphi-Quellcode:
kannst du auch gleich
var karte:Tkarte;
begin karte:=Tkarte.create(edit1.text,edit2.text); liste.Add(karte);
Delphi-Quellcode:
schreiben.
liste.Add(Tkarte.create(edit1.text,edit2.text));
Du kannst ja mal schauen welchen Werte "karte.name" nach
Delphi-Quellcode:
hat.
var karte:Tkarte;
begin karte:=Tkarte.create(edit1.text,edit2.text); liste.Add(karte); |
Re: Objekte in Listen und deren Eigenschaften
Zitat:
sozusagen: "Create And Forget" |
Re: Objekte in Listen und deren Eigenschaften
Und es gibt ab TStrings noch die Eigenschaft Objects. Nenne ein Element doch Pik-As und verpaße dem zugehörigen Object einfach ein passendes Image. :-D
|
Re: Objekte in Listen und deren Eigenschaften
:(
Zitat:
2) Dann erscheint das, was ich auch eingegeben habe, also richtig... Zitat:
Zitat:
Hier nochmal die komplette (geänderte) Unit:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, UKarte, StdCtrls, Contnrs; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Edit1: TEdit; Edit2: TEdit; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); end; var Form1: TForm1; Liste: TObjectList; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var zahl:integer; begin zahl:=liste.Add(Tkarte.create(edit1.text,edit2.text)); showmessage(TKarte(liste[zahl]).gibFrage); end; procedure TForm1.Button2Click(Sender: TObject); var i: integer; karte:Tkarte; begin for i:=0 to liste.count-1 do begin karte:=TKarte(liste[i]); showmessage(karte.gibfrage); end; end; procedure TForm1.FormCreate(Sender: TObject); begin liste:=TObjectList.create(); end; end. |
Re: Objekte in Listen und deren Eigenschaften
Ich glaub es nicht...
An dem Code war wirklich alles richtig. Ich hatte aber in der Klasse TKarte die Variablen folgendermaßen deklariert:
Delphi-Quellcode:
Diese scheinen dann public zu sein - was mir nicht bewusst war -
implementation
var Frage, Antwort:String; //.. procedure ... und haben sich wohl immer gegenseitig überschrieben. Dieser Fehler ist mir vor einiger Zeit schon mehrere male passiert. Tut mir echt Leid, dass ich aus so einem Mist, so einen Thread mache... Aber immerhin weiß ich es ja jetzt! :D |
Re: Objekte in Listen und deren Eigenschaften
diese Variablen sind nicht Public sondern Global und genau aus dem Grund was dir passiert ist sind diese Globalen so unbeliebt. Eine Variable gehört in eine Klasse (wenn sie mit der Klasse in Zusammenhang steht) und nicht in die Unit pur.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:41 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