![]() |
Lsitbox Einträge in Stringlist übertragen
Hi, ich hab mal ne Frage.
In meinem Programm lade ich per Button meine Listbox. Das sind Dateipfade. Die möchte ich jetzt in eine Stringlist übergeben. Nur wie macht man das? danke für eure Hilfe im vorraus Mfg PACMAN |
Re: Lsitbox Einträge in Stringlist übertragen
Hallo,
z.B. so:
Delphi-Quellcode:
Edit: dummen Fehler korrigiert
Procedure TForm1.Button1Click(Sender: TObject);
Var lstData: TStringlist; Begin lstData := TStringlist.Create; Try lstData.AddStrings(ListBox1.Items); //Mache etwas mit der Stringliste Finally FreeAndNil(lstData); End; End; |
Re: Lsitbox Einträge in Stringlist übertragen
Alles klar, Problem gelöst
danke |
Re: Lsitbox Einträge in Stringlist übertragen
Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
Var lstData: TStringlist; Begin lstData := TStringlist.Create; Try lstData.Assign(ListBox1.Items); //Mache etwas mit der Stringliste Finally lstData.free; End; End; |
Re: Lsitbox Einträge in Stringlist übertragen
Wenn die Items keine Objektreferenzen haben, ist es aber doch egal, ob ich 'Assign', oder 'AddStrings' nehme, oder hat das noch andere Auswirkungen?
Und wo ist der Vorteil von 'Free' gegenüber 'FreeAndNil'? Ich frage deshalb, weil Du ![]() |
Re: Lsitbox Einträge in Stringlist übertragen
Zitat:
Eine Regel, die man im Kopf behalten kann. - Nutze ich die Objektvariable nur einmal reicht ein Free.
Delphi-Quellcode:
procedure DoSomething();
var LObject: TSomeType; begin LObject := TSomeType.Create; try ... ... finally LObject.Free; end; end; - Nutze ich die Objectvariable mehrfach ist es sicherer, sie nach der Benutzung auf NIL zu setzen
Delphi-Quellcode:
procedure DoSomething();
var LObject: TSomeType; i: Integer; begin for i := 0 to 1000 do begin LObject := TSomeType.Create; try ... ... finally FreeAndNil(LObject); end; end; LObject := TSomeType.Create; try ... ... finally LObject.Free; end; end; |
Re: Lsitbox Einträge in Stringlist übertragen
Danke für die Erläuterung,
da ich ein Gewohnheitstier bin, kann ich dann ja bei FreeAndNil bleiben; vorausgesetzt, ich kann Dein Zitat:
Weisst Du auch etwas zu 'Assign' <> 'AddStrings' zu sagen? Sehe da ausser den von mir genannten keinen weiteren Vorteil. |
Re: Lsitbox Einträge in Stringlist übertragen
Zitat:
Der andere Fall immer Free benutzen kann Probleme bringen. Zitat:
Aus der Hilfe: Assign: procedure Assign(Source: TPersistent); override; Beschreibung Mit der Methode Assign wird einem TStrings-Objekt der Wert eines anderen Objekts zugewiesen. Ist das Quell-Objekt ebenfalls vom Typ TStrings, enthalten beide Objekte anschließend die gleiche Liste. Falls den String-Werten der Quelle Objekte zugeordnet sind, werden auch diese übernommen, wenn das Zielobjekt diese Eigenschaft unterstützt. Wenn das mit dem Parameter Source bezeichnete Quellobjekt nicht vom Typ TStrings ist, übernimmt die geerbte Assign-Methode den Listenwert von einem beliebigen anderen Objekt, das in seiner AssignTo-Methode die Klasse TStrings unterstützt. AddStrings: procedure AddStrings(Strings: TStrings); virtual; Beschreibung Mit der Methode AddStrings lassen sich die String-Einträge eines anderen TStrings-Objekts zu einer String-Liste hinzufügen. Wenn beide TStrings-Objekte Strings mit zugeordneten Objekten unterstützen, werden mit den Strings auch die zugehörigen Objekt-Referenzen übertragen. Wie du siehst ist es schon ein Unterschied, aber in deinem Fall jetzt ist es unerheblich und liefert dasselbe Resultat. |
Re: Lsitbox Einträge in Stringlist übertragen
Zitat:
Mich interessierte nur, ob es ausser diesem, noch einen weiteren Unterschied gibt, der in der Hilfe nicht erläutert ist. |
Re: Lsitbox Einträge in Stringlist übertragen
Zitat:
Und um deine Frage nochmal direkt zu beantworten: AddStrings() wird auch von Assign() benutzt:
Delphi-Quellcode:
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.
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; 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" |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:16 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 by Thomas Breitkreuz