AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TStringList einer TListBox zuweisen

Ein Thema von Peter-Pascal · begonnen am 10. Okt 2012 · letzter Beitrag vom 12. Okt 2012
Antwort Antwort
Peter-Pascal

Registriert seit: 18. Feb 2007
Ort: 32139 Spenge
200 Beiträge
 
Delphi 11 Alexandria
 
#1

TStringList einer TListBox zuweisen

  Alt 10. Okt 2012, 20:20
Hallo,

ich bin ein wenig ratlos, bzw. hoffe das mir das jemand erklären kann.

Ich habe eine TStringList (Liste := TStringList.create) und möchte diese einer TCheckListBox zuweisen in der Annahme, dass mir der Inhalt ausgewiesen wird.
CheckListBox1.Items := Liste;
Alles was ich später in Liste schreibe wird nicht in der CheckListBox aufgeführt.

Weise ich meiner Variablen Liste (deklariert als TStringList) := CheckListBox1.Items zu, dann funktioniert es. Kann es sein, dass glaube ich hier mal gelesen zu haben, dass nur eine Kopie im vorherigen Falle benutzt wird? Es als quasi zwei Listen gibt?

Ich nutze die Object-Eigenschaft der TStringList (Liste.AddObject('Neuer Eintrag',TObject.create); und wollte über die CheckListbox auch die Objecte verändern,in der Annahme auch die zugewiese Liste hat den gleichen Inhalt.

Vielen Dank für Eure Hilfe

Gruß Peter
Peter Niemeier
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.374 Beiträge
 
Delphi 12 Athens
 
#2

AW: TStringList einer TListBox zuweisen

  Alt 10. Okt 2012, 20:33
Tja, da die TListBox, bzw. TCheckListBox, so wie z.B. auch ein TMemo, ihre eigenen ganz "speziellen" Listen besitzen und es absichtlich nicht zulassen, daß man diese austauscht/kaputtmacht, wird dieser "Schreibzugriff" anders behandelt.

Aber ein Blick in die Quellcodes hätte es einem auch selbst verraten, also daß es im Setter etwas Anders behandelt wird.
CheckListBox1.Items.Assign(Liste);

Und TStrings.Assign macht
Delphi-Quellcode:
CheckListBox1.Items.Clear;
CheckListBox1.Items.AddStrings(Liste);
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Peter-Pascal

Registriert seit: 18. Feb 2007
Ort: 32139 Spenge
200 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: TStringList einer TListBox zuweisen

  Alt 10. Okt 2012, 20:37
Ich muss zugeben bislang noch nicht in den Quellcode geschaut zu haben, bin ich bislang noch nie so richtig durchgestiegen.

Aber es klappt doch, wenn ich es umgekehrt zuweise, also der Liste die Items aus ChecklistBox?
Peter Niemeier
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.374 Beiträge
 
Delphi 12 Athens
 
#4

AW: TStringList einer TListBox zuweisen

  Alt 10. Okt 2012, 21:05
Du mußt unbedingt den Unterschied zwischen einem Property und einer Variable lernen.

Nochmals:

Beim Zuweisen an TListBox.Items wird ein Setter aufgerufen und darin wird der Inhalt (alle Strings) von der Einen in die andere Stringliste kopiert.

Wenn du deiner Variable umgekehrt den TListBox.Items zuweist, dann speicherst du nur den Instanzzeiger der Stringliste in deiner Variable.
PS: Du hast dir grade ein Speicherleck gebastelt, denn die TStringList, welche vorher in der Variable "verlinkt" war, fliegt nun spurlos und verloren im Speicher rum.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Peter-Pascal

Registriert seit: 18. Feb 2007
Ort: 32139 Spenge
200 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: TStringList einer TListBox zuweisen

  Alt 10. Okt 2012, 21:28

Wenn du deiner Variable umgekehrt den TListBox.Items zuweist, dann speicherst du nur den Instanzzeiger der Stringliste in deiner Variable.
PS: Du hast dir grade ein Speicherleck gebastelt, denn die TStringList, welche vorher in der Variable "verlinkt" war, fliegt nun spurlos und verloren im Speicher rum.
Genau diese Zuweisung wollte ich ja, denn so kann ich von zwei Stellen auf die gleiche Liste zugreifen. Oder gibt es eine andere Möglichkeit?

Reicht es nicht, der Variablen Nil zuzuweisen, um das Speickerleck zu beseitigen? TListBox.Items wird von TListBox aus dem Speicher entfernt
Peter Niemeier
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.374 Beiträge
 
Delphi 12 Athens
 
#6

AW: TStringList einer TListBox zuweisen

  Alt 10. Okt 2012, 21:52
Genau diese Zuweisung wollte ich ja, denn so kann ich von zwei Stellen auf die gleiche Liste zugreifen.
Wenn es nur darum geht, dann würde das so schon funktionieren.
Du brauchst vorher nur keine TStringList zu erstellen und in die Variable zu legen.

TListBox.Items wird von TListBox aus dem Speicher entfernt
Jupp.

Reicht es nicht, der Variablen Nil zuzuweisen, um das Speickerleck zu beseitigen?
Wenn du vorher eine selbsterzeugte TStringList dort reingetan hast, dann nicht, denn um die Freigabe dieser Instanz müsstest du dich kümmern.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 04:36 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