![]() |
Inhalt TStringList in andere TStringList kopieren
Ich habe nochmal kurz eine Verständnis Frage:
Wenn ich einer TStringList den Inhalt einer anderen TStringList zuweise, lieg ich doch hiermit total daneben oder? :|
Delphi-Quellcode:
StringList1 := StringList2;
|
Re: Inhalt TStringList in andere TStringList kopieren
Damit zeigen beide Objekte auf dieselbe Instanz, das ist sicher nicht das, was Du erreichen willst. Du könntest entweder Assign oder AddStrings verwenden, wobei ich Assign für die elegantere Variante halte.
|
Re: Inhalt TStringList in andere TStringList kopieren
Werds mal probieren.
Danke Ferox |
Re: Inhalt TStringList in andere TStringList kopieren
Delphi-Quellcode:
Stnglist_A.Text := StringList_B.Text;
|
Re: Inhalt TStringList in andere TStringList kopieren
Stimmt, das ginge auch, hab ich gar nicht dran gedacht.
|
Re: Inhalt TStringList in andere TStringList kopieren
Zitat:
|
Re: Inhalt TStringList in andere TStringList kopieren
- :idea: - Der Hinweis ist gut ! // Grüße Martin
|
AW: Inhalt TStringList in andere TStringList kopieren
Wie sieht es denn mit dem Übergeben einer Stringlist am ende einer Funktion aus?
Ich knobel schon den ganzen Vormittag damit, einen Zeiger-Fehler zu beheben, der scheinbar durch leere Listen verursacht wird. mein Code ist etwa so:
Delphi-Quellcode:
Der Fehler wird verursacht, weil meine MyList, die ich anderer Stelle aus dem Result kriege
function TForm1.ManipulateList(ThatList: TStringlist): TStringlist;
var I: Integer; TempString: String; TempStringlist: TStringlist; begin TempStringlist:= Thatlist; [... manipulate TempStringList ...] Result:= Tempstringlist; TempstringList.free;
Delphi-Quellcode:
einfach verschwindet.
ManipulatedList:= ManipulateList(MyList);
Das Problem liegt wohl an dem
Delphi-Quellcode:
, wo ich die TempStringlist lösche. Das weiß ich, weil ich durch Probieren genau hier den Grund dafür gefunden habe. Mit .Free kriege ich leere Listen und damit Fehlermeldungen vom Typ "Listenindex überschreitet Maximum", und ohne das .Free läuft alles super.
TempStringlist.free;
Jetzt zwei Fragen: 1)Brauche ich das Löschen mit .Free hier? 2) Wie kriege ich meine Liste als Funktionsrückgabe kopiert und nicht als Zeiger? Methoden wie
Delphi-Quellcode:
haben nicht funktioniert.
Result.Assign(TempStringlist);
|
AW: Inhalt TStringList in andere TStringList kopieren
Eine Klassenreferenz ist ein Zeiger, nach
Delphi-Quellcode:
Zeigen sowohl TempStringList wir auch ThatList auf das selbe Objekt.
TempStringlist:= Thatlist;
Delphi-Quellcode:
function TForm1.ManipulateList(ThatList: TStrings): TStrings;
var I: Integer; TempString: String; TempStringlist: TStrings; begin TempStringlist:= TstringList.Create; TempStringList.Append(Thatlist); [... manipulate TempStringList ...] Result:= Tempstringlist; //TempstringList.free; |
AW: Inhalt TStringList in andere TStringList kopieren
Zuerst paar Punkte vorweg: wer
Delphi-Quellcode:
ignoriert, weil er es zu dem Zeitpunkt noch nicht braucht und es mal später reinschreiben will, der verdient all seine Probleme. Denn wer
Try Finally
Delphi-Quellcode:
direkt schreibt, sieht wo es happert. Es fällt schon alleine durch den Block auf wo noch etwas fehlt. Wer es nicht macht, den kann man nicht bedauern wenn es paar Stunden an einem Problem hängt. Das sind selbstfabrizierte Probleme.
Try Finally
Wenn man einmal
Delphi-Quellcode:
als Variablennamen definiert hat, dann bleibt man dabei. Man schreibt es nicht mal TempStringlist, mal Tempstringlist, mal TempstringList. In der Windowswelt ist es egal, es erhöht aber die Lesbarkeit. In anderen BS ist das ein Fehler.
TempStringlist
Ich weiß zwar nicht was du machen willst, aber ja, ein Free ist immer nötig. Wenn du an Result (TStringList) etwas übergeben willst, wie wäre es wenn du es erst erzeugen würdest? Was meinst du mit kopieren? Willst du tatsächlich nur die Adresse kopieren oder den Inhalt? Ein Vorschlag:
Delphi-Quellcode:
function ManipulateList(ThatList: TStringlist): TStringlist;
var TempStringList: TStringlist; begin TempStringList := TStringList.Create; try TempStringList.AddStrings(ThatList); //hier irgendwas machen Result := TStringList.Create; Result.AddStrings(TempStringlist); finally TempStringList.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); var i: Integer; sl, slResult: TStringList; begin sl := TStringList.Create; try for i := 1 to 20 do sl.Add(IntToStr(i)); slResult := ManipulateList(sl); ShowMessage(slResult.Text); slResult.Free; finally sl.Free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 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