![]() |
Delphi-Version: 2010
TObjectList - Element austauschen
Moin !
Ich habe da zwei Objectlisten - Input und Output. In Input habe ich Referenzen auf zwei Klassen. Dann möchte ich Output Elemente von Input zuweisen. Das geht auch soweit mit z.B. Output.Add(Input.Items[0]); So nun würde ich aber gerne ein Item der Outputliste ändern. Ich habe es so versucht: Output.Items[1] := Input.Items[1]; Aber das ist nicht korrekt. Nur wie ist das richtige Vorgehen? Die Items in Input sollen bestehen bleiben, ich will die also nicht in Output kopieren. Anbei mal mein Testcode:
Delphi-Quellcode:
unit Test;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Contnrs, StdCtrls; type TForm3 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; TItem = class private FValueString : string; public property ValueAsString : string read FValueString write FValueString; end; var Form3 : TForm3; Input, Output : TObjectList; implementation {$R *.dfm} procedure TForm3.FormCreate(Sender: TObject); var item : TItem; text : string; I : Integer; begin Input := TObjectList.Create; Output := TObjectList.Create; item := TItem.Create; item.FValueString := 'Test 1'; Input.Add(item); item := TItem.Create; item.FValueString := 'Test 2'; Input.Add(item); Output.Add(Input.Items[0]); Output.Add(Input.Items[0]); Output.Add(Input.Items[1]); for I := 0 to Output.Count - 1 do text := text + TItem(Output.items[i]).ValueAsString +#13#10; ShowMessage(text); end; procedure TForm3.Button1Click(Sender: TObject); var i : smallint; begin Output.Items[1] := Input.Items[1]; for I := 0 to Output.Count - 1 do text := text + TItem(Output.items[i]).ValueAsString +#13#10; ShowMessage(text); end; end. |
AW: TObjectList - Element austauschen
Auch so gehts nicht:
Delphi-Quellcode:
:gruebel:
idx := Output.Add(Input.Items[1]);
Output.Exchange(idx, 1); Output.Delete(idx); |
AW: TObjectList - Element austauschen
Moin,
ich würde OwnObjects von Output auf false stellen. Das kannst du übrigens schon im Konstruktor übergeben. MfG Fabian PS: Warum sind Output/Input global? Ich würde das öffentlich machen. |
AW: TObjectList - Element austauschen
Zitat:
Danke. Wenn ich das nicht setze wird das Object von Input nach Output kopiert, oder? Will heissen es ist in Input nicht mehr vorhanden? Zitat:
Normal ist das Bestandteil einer Klasse. |
AW: TObjectList - Element austauschen
OwnsObjects sagt der TObjectList, ob die Objekte gefreet werden soll beim Löschen
|
AW: TObjectList - Element austauschen
Moin,
ich vermute, dass, wenn du das 2. Element in Output überschreibt, dass er das freigibt. Und das ist nun (rein zufällig :mrgreen: ) auch das 1. Element in Output (und auch das 1. Element in Input). MfG Fabian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:39 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