AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Lsitbox Einträge in Stringlist übertragen
Thema durchsuchen
Ansicht
Themen-Optionen

Lsitbox Einträge in Stringlist übertragen

Ein Thema von P4CM4N · begonnen am 24. Sep 2007 · letzter Beitrag vom 26. Sep 2007
Antwort Antwort
Seite 1 von 2  1 2      
P4CM4N

Registriert seit: 14. Jun 2007
49 Beiträge
 
#1

Lsitbox Einträge in Stringlist übertragen

  Alt 24. Sep 2007, 19:30
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
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#2

Re: Lsitbox Einträge in Stringlist übertragen

  Alt 24. Sep 2007, 19:39
Hallo,

z.B. so:
Delphi-Quellcode:
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;
Edit: dummen Fehler korrigiert
  Mit Zitat antworten Zitat
P4CM4N

Registriert seit: 14. Jun 2007
49 Beiträge
 
#3

Re: Lsitbox Einträge in Stringlist übertragen

  Alt 24. Sep 2007, 19:43
Alles klar, Problem gelöst
danke
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Lsitbox Einträge in Stringlist übertragen

  Alt 25. Sep 2007, 09:08
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;
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#5

Re: Lsitbox Einträge in Stringlist übertragen

  Alt 25. Sep 2007, 09:16
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 hier selber auf 'FreeAndNil' verweist.
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Lsitbox Einträge in Stringlist übertragen

  Alt 25. Sep 2007, 09:24
Zitat von s-off:
Und wo ist der Vorteil von 'Free' gegenüber 'FreeAndNil'?
Fast gar nicht.
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;
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#7

Re: Lsitbox Einträge in Stringlist übertragen

  Alt 25. Sep 2007, 09:28
Danke für die Erläuterung,

da ich ein Gewohnheitstier bin, kann ich dann ja bei FreeAndNil bleiben; vorausgesetzt, ich kann Dein
Zitat:
Fast gar nicht.
als 'gar nicht' interpretieren

Weisst Du auch etwas zu 'Assign' <> 'AddStrings' zu sagen?
Sehe da ausser den von mir genannten keinen weiteren Vorteil.
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Lsitbox Einträge in Stringlist übertragen

  Alt 25. Sep 2007, 09:38
Zitat von s-off:
Danke für die Erläuterung,

da ich ein Gewohnheitstier bin, kann ich dann ja bei FreeAndNil bleiben; vorausgesetzt, ich kann Dein
Zitat:
Fast gar nicht.
als 'gar nicht' interpretieren
Immer FreeAndNil benutzen ist völlig ok.
Der andere Fall immer Free benutzen kann Probleme bringen.

Zitat von s-off:
Weisst Du auch etwas zu 'Assign' <> 'AddStrings' zu sagen?
Sehe da ausser den von mir genannten keinen weiteren Vorteil.
[/quote]

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.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#9

Re: Lsitbox Einträge in Stringlist übertragen

  Alt 25. Sep 2007, 10:00
Zitat von Tyrael Y.:
Wie du siehst ist es schon ein Unterschied, aber in deinem Fall jetzt ist es unerheblich und liefert dasselbe Resultat.
Ähm, ja, diesen Unterschied hatte ich ja bereits genannt
Mich interessierte nur, ob es ausser diesem, noch einen weiteren Unterschied gibt, der in der Hilfe nicht erläutert ist.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#10

Re: Lsitbox Einträge in Stringlist übertragen

  Alt 25. Sep 2007, 22: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
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz