| Autor |
Beitrag |
Fabian W.
      
Beiträge: 1766
Win 7
D7 PE
|
Verfasst: Mi 08.02.06 16:01
Hallo!
Ich möchte ein ListViewItem dessen index ich kenne auch in ein anderes ListView kopieren. Das ganze bewerkstellige ich so:
ListView1.Items.AddItem(Form1.ListView2.Items[x]);Nun löscht er aber die kopierten Items aus Form1.ListView2wenn sie kopiert sind. Außerdem wird die Caption nicht in die ListView1 mit übernommen.
Kennt jemand ne alternative Procedure oder meinen Fehler??
mfg Moderiert von Gausi: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mi 08.02.2006 um 16:03
|
|
digi_c
      
Beiträge: 1905
W98, XP
D7 PE, Lazarus, WinAVR
|
Verfasst: Mi 08.02.06 18:17
Wenn ich das jetzt noch richtig überblicke machst du den Fehler nicht Assign zu benutzen, der die Eigenschaften auf einen neuen Knoten kopiert.
www.dsdt.info/tutorials/listen/?page=6
Baue erst einen Knoten ein und Assigne den dann auf den alten...
|
|
Fabian W. 
      
Beiträge: 1766
Win 7
D7 PE
|
Verfasst: Do 09.02.06 17:18
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm1.Button1Click(Sender: TObject); var StrL1: TStringList; StrL2: TStringList; begin StrL1:=TStringList.Create; StrL2:=TStringList.Create; try StrL1.Add('Erster String'); StrL1.Add('Zweiter String'); StrL1.Add('Dritter String');
StrL2:=StrL1; finally StrL1.Free; StrL2.Free; end; end; | Ich versteh ned ganz was das mit AddItem zu hat?!
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Do 09.02.06 17:53
Hallo
weil du genau wie bei StrL2:=StrL1 nicht den inhalt kopierst, sondern nur den Zeiger verbiegst. STRl2 ud Strl1 zeigen auf dasselbe und nicht auf 2 verschiedene Objekte. Änderungen an der einen Liste wirken sich auch auf die andere aus. Genau wie bei ListView1.Items.AddItem(Form1.ListView2.Items[x]); gibt es das Items[x] nur einmal, es wir keine kopie angelegt.
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| Var Listitem:Tlistitem; begin Listitem:=Tlistitem.create; listitem.assign(Form1.ListView2.Items[x]); ListView1.Items.AddItem(listitem); end; |
(ungetestet)
Mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Do 09.02.06 17:56
Hallo,
digi_c hat folgendes geschrieben: | | Wenn ich das jetzt noch richtig überblicke machst du den Fehler nicht Assign zu benutzen, der die Eigenschaften auf einen neuen Knoten kopiert. |
das wird bei dem Tutorial auch besprochen.
Kopieren mit Assign sieht dann etwa so aus:
Delphi-Quelltext 1: 2: 3: 4:
| var NewItem : TListItem; begin NewItem := ListView2.Items.Add; NewItem.Assign(ListView1.Selected); |
Fehlerbehandlung nicht eingebaut
//Edit: zu spät 
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
Fabian W. 
      
Beiträge: 1766
Win 7
D7 PE
|
Verfasst: Do 09.02.06 18:10
OK, danke funzt. Die Procedure AddItem ist dann praktisch sinnlos, könnt ich ja auch := nehmen... Die schaffen 'ne Arbeit bei Borland...
mfg
|
|
digi_c
      
Beiträge: 1905
W98, XP
D7 PE, Lazarus, WinAVR
|
Verfasst: Fr 10.02.06 08:47
Ne ne da tust du den ein wenig umrecht, du musst bloß z.B. in einer Schleife einen temporäres Item erstellen, dem die Werte mit Assign zuordnen und dann darfst du AddItem benutzen 
|
|
Fabian W. 
      
Beiträge: 1766
Win 7
D7 PE
|
Verfasst: Fr 10.02.06 13:54
Nur hätte man das mit assign auch da mit reinpacken können. Man macht ja schließlich die Proceduren damit man nen einzeiligen Befehl hat, indem der ganze nötige Kram zusammengefast ist... naja egal thx nochma'
|
|