Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ListItem := Listview1.Items.Add; ? (https://www.delphipraxis.net/14753-listitem-%3D-listview1-items-add%3B.html)

Pseudemys Nelsoni 15. Jan 2004 00:26


ListItem := Listview1.Items.Add; ?
 
moin,

siehe threadname, ich verstehe die zuweisung irgendwie nicht.
hat das den gleichen effekt wie:

ListView.Items.Add(ListItem);

?

Skiron 15. Jan 2004 03:18

Re: ListItem := Listview1.Items.Add; ?
 
ganz einfach: die items einer listbox sind ein einfacher string. die kann man ganz einfach mit einem Paramete ausfüllen, den man bereits mitgeben kann.
Die Items der Listview hingegen sind eine eigene Klasse mit vielen Eigenschaften usw., wo man nicht verlangen kann, dass man sich vorher ein Item selbst macht, dessen Eigenschaften initialisiert und dann der Listview hinzufügt
Du könnstest aber einfach schreiben:
Listbox1.Items.Add('');

Dani 9. Feb 2005 01:01

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

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 :gruebel: [/size]

Muetze1 9. Feb 2005 08:18

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

Grundlegend geht es auch darum, das die Items der ListView einmal automatisch in einer Liste im ListView verwaltet werden und die Items selber auch interne Informationen des ListViews bekommen. Dadurch das beide in der selben Unit deklariert sind nutzt Borland das friend Verhalten der beiden Klassen aus um spezielle Informationen den Items zu geben welche dadurch nicht öffentlich in TListItem oder TListView deklariert werden müssen.

MfG
Muetze1


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 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