Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: An ListView ein SubItem anhängen

  Alt 13. Jun 2007, 09:02
Items.Add gibt dir ein TListItem zurück. Dieses kannst du direkt ansprechen und musst somit nicht per Index drauf zugreifen.
Also an stelle von:
Delphi-Quellcode:
var
  lListItem: TListItem;
begin
  MSObj:= TMSV1.Create; // Obj. für die Liste erzeugen
  MSObj.MSDateiName:= MSDateiName;
  MSObj.MSLesen:= i+1; // Datensatz auslesen
  lListItem := MSAnzeigenListView.Items.Add();
  lListItem.Caption := MSObj.MaNr+MSObj.MSNr;
  lListItem.Data := MSObj;
  lListItem.SubItems.Add(MSObj.MaNr);
  lListItem.SubItems.Add(MSObj.MSNr);
  lListItem.SubItems.Add(MSObj.MaBez);
  lListItem.SubItems.Add(MSObj.MaGruppe1);
  // Anzeige des Richtigen Icons
  If MSObj.DarstellungsArt = 0 then
  begin
    lListItem.ImageIndex:= 1;
  end;
Zitat:
Noch ein Hinweis, mir ist klar das ich auch mit TListItem arbeiten könnte und die Methode
ListView.Items.Add; verwenden könnte, dies hat aber den Nachteil das ich die Daten ins Object kopieren müsste.
versteh ich nicht es ist doch das gleiche ob du AddItem verwendest oder Add einzeln und anschließend Item.Data und Item.Caption zuweist. AddItem macht ja auch nichts anderes:
Zitat:
procedure TCustomListView.AddItem(Item: String; AObject: TObject);
begin
with Items.Add do
begin
Caption := Item;
Data := AObject;
end;
end;
ich versteh nicht warum man diese unbedingt 2 zeilen sparen will und sich damit solche Probleme bzw. schwierigkeiten einhandelt.

Aber wenn du unbedingt bei deiner Variante bleiben willst versteh ich auch nicht das Problem. Im ersteren Quelltext greifst du mit i drauf zu. Wenn du mit AddObject ein neues Item hinzufügst wird dieses auch nur ans Ende angehangen. Dementsprechend ist
i = ListView.Items.Count - 1; Was aber wie gesagt völlig unnötig ist. Denn durch den Zugriff mit Items.Item[i] werden intern auch GetMethoden aufgerufen die das ganze nur langsamer machen als ein direktzugriff auf das Item. Denn durch Items.Item[i] wird jedesmal erst das Items abgerufen (was du ja auch gleich hamm könntest wenn du Add verwendest) und danach passiert das gleiche. Also unnötige Schritte.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat