Autor Beitrag
Fabian W.
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1766

Win 7
D7 PE
BeitragVerfasst: 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 user profile iconGausi: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mi 08.02.2006 um 16:03
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: 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. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1766

Win 7
D7 PE
BeitragVerfasst: Do 09.02.06 17:18 
ausblenden 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;  //Hier ist die entscheidende Zeile
  finally
    StrL1.Free;
    StrL2.Free;
  end;
end;
Ich versteh ned ganz was das mit AddItem zu hat?!
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Var Listitem:Tlistitem;
  begin
    Listitem:=Tlistitem.create;
    listitem.assign(Form1.ListView2.Items[x]);//kopieren
    ListView1.Items.AddItem(listitem);
  end;

(ungetestet)

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Do 09.02.06 17:56 
Hallo,
user profile icondigi_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:
ausblenden 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 :wink:

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Fabian W. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1766

Win 7
D7 PE
BeitragVerfasst: 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... :roll:


mfg
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: 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. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1766

Win 7
D7 PE
BeitragVerfasst: 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'