Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#10

Re: Lsitbox Einträge in Stringlist übertragen

  Alt 25. Sep 2007, 23:50
Zitat von s-off:
Mich interessierte nur, ob es ausser diesem, noch einen weiteren Unterschied gibt, der in der Hilfe nicht erläutert ist.
Die Frage ist nach der Übertragung der kompletten Einträge formuliert worden. AddStrings() würde nur hinzufügen. Du hast in deiner Lösung eine frisch erstellte, lokale TStringList-Instanz benutzt. Nun weiss ich aber nicht, wo und wie der Threadersteller deinen Code einsetzt. Wenn er anhand seiner Frage eine direkte Zuordnung erhalten wollte und statt dessen hinten angehängte Einträge bekommt, dann ist seine Frage falsch beantwortet worden. Von daher habe ich nur die entsprechende Antwort zu dem Thread-Thema gegeben.

Und um deine Frage nochmal direkt zu beantworten: AddStrings() wird auch von Assign() benutzt:
Delphi-Quellcode:
procedure TStrings.Assign(Source: TPersistent);
begin
  if Source is TStrings then
  begin
    BeginUpdate;
    try
      Clear;
      AddStrings(TStrings(Source));
    finally
      EndUpdate;
    end;
    Exit;
  end;
  inherited Assign(Source);
end;
Nur sorgt Assign() dafür, dass die Einträge wirklich 1:1 übertragen werden und somit auch die alten Einträge entsprechend entfernt werden vor der Zuordnung.

Und zu deiner Free/FreeAndNil() Frage: Die grundlegenden Dinge wurden genannt. In deinem Beispielcode ist die StringList Instanz eine lokale Variable die nicht weiter verwendet wird. Von daher braucht es keinen zusätzlichen Overhead der NIL Setzung und zum anderen nicht eines weiteren Aufrufs. FreeAndNil() ist hier die zusätzliche Rolle Klebeband um das Leck, welches schon nach der ersten Dichtungsmasse nicht mehr vorhanden war - und dem Schildchen am Rohr: "Hier war einmal ein Leck"
  Mit Zitat antworten Zitat