Einzelnen Beitrag anzeigen

Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: ListItem := Listview1.Items.Add; ?

  Alt 9. Feb 2005, 01:01
Zitat von Pseudemys Nelsoni:
siehe threadname, ich verstehe die zuweisung irgendwie nicht.
hat das den gleichen effekt wie:
ListView.Items.Add(ListItem);
Hi,

ListView1.Items.Add(ListItem) würde gar nicht compilieren, da Add() keine Parameter erwartet.
Add() erstellt von sich aus ein neues ListItem und liefert den Zeiger darauf. Man könnte also z.B. schreiben:

Delphi-Quellcode:
var NewItem: TListItem;
begin
  NewItem := ListView1.Items.Add;
  NewItem.Caption := 'Neues Item';
end;
Der alternative Weg, ein ListItem einzufügen, ist anscheinend ein wenig verbuggt.

Delphi-Quellcode:
type
  TMySpecialListItem = class(TListItem)
  public
   TimeStamp: TDateTime;
   LinkedObj: TObject;
  end;

Falsch:
Delphi-Quellcode:
procedure Foo;
var NewItem: TMySpecialListItem;
begin
  NewItem := TMySpecialListItem.Create(ListView1.Items); {Item wird noch nicht angezeigt}
  NewItem.Caption := 'Neues Item';
  NewItem.TimeStamp := now;
  LinkedObj := SomeThreadOrSomeImageOrWhatever;

  ListView1.Items.AddItem(NewItem); {Eigenschaft Caption geht verloren => leerer Eintrag}
end;
"Richtig":
Delphi-Quellcode:
procedure Foo;
var NewItem: TMySpecialListItem;
begin
  NewItem := TMySpecialListItem.Create(ListView1.Items); {Item wird noch nicht angezeigt}
  ListView1.Items.AddItem(NewItem);
  NewItem.Caption := 'Neues Item';
end;
[size=2]Alternative method may or may not cause memory leaks [/size]
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat