Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem mit StringList als Property (https://www.delphipraxis.net/112749-problem-mit-stringlist-als-property.html)

Helmi 26. Apr 2008 10:22


Problem mit StringList als Property
 
Hallo,

ich steh gerade so richtig auf dem Schlauch.

Ich versuche vergebens eine StringList als Property zu übergeben.

folgendes hab ich schon:

Unit in der die Property ist:
Delphi-Quellcode:
  private
    { Private-Deklarationen }
    //Ein-/Ausgabe
    FEinAusgabe_StringList_Tasten: TStringList;

    function GetEinAusgabe_StringList_Tasten: TStringList;
    procedure SetEinAusgabe_StringList_Tasten(Value: TStringList);
  public
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
    //Ein-/Ausgabe
    property EinAusgabe_StringList_Tasten : TStringList
      read GetEinAusgabe_StringList_Tasten write SetEinAusgabe_StringList_Tasten;

//----------------------------------PRIVATE-----------------------------------//

function TSymboleForm.GetEinAusgabe_StringList_Tasten: TStringList;
begin
  Result := (FEinAusgabe_StringList_Tasten);
end;

procedure TSymboleForm.SetEinAusgabe_StringList_Tasten(Value: TStringList);
begin
  FEinAusgabe_StringList_Tasten.Assign(Value);
end;

//-----------------------------------PUBLIC-----------------------------------//
Und der Aufruf aus der anderen Unit:
Delphi-Quellcode:
  with SymboleForm do
    begin
      //Eingabe-Paramter beschreiben
      EinAusgabe_StringList_Tasten := StringList_Tasten;

      //Symbole anzeigen
      If Execute then            //hier wird die andere Form mit ShowModal aufgerufen
        begin
          StringList_Tasten.Assign(EinAusgabe_StringList_Tasten);
        end;
    end;
Wenn ich aber nun mir den Inhalt der StringList_Tasten anschau ist der leer obwohl
in der anderen Form die StringList FEinAusgabe_StringList_Tasten etwas beinhaltet.

Ach ja - ich möchte die StringList FEinAusgabe_StringList_Tasten von der anderen Form
beschreiben als auch auslesen.

Irgendwas mach ich falsch - nur was?

SirThornberry 26. Apr 2008 10:46

Re: Problem mit StringList als Property
 
wie prüfst du denn ob was drin ist? Und woher weißt du das du wirklich was rein stopfst?

Helmi 26. Apr 2008 10:49

Re: Problem mit StringList als Property
 
Also ich kann sicher sein, dass was drin ist.

Aber ich hab jetzt den Fehler gefunden.

Die function war das übel:
Delphi-Quellcode:
function TSymboleForm.GetEinAusgabe_StringList_Tasten: TStringList;
begin
  Result := (FEinAusgabe_StringList_Tasten);
end;
So muss es sein:
Delphi-Quellcode:
function TSymboleForm.GetEinAusgabe_StringList_Tasten: TStringList;
begin
  Result := TStringList.Create;

  Result.Assign(FEinAusgabe_StringList_Tasten);
end;

jbg 26. Apr 2008 10:53

Re: Problem mit StringList als Property
 
Zitat:

Zitat von Helmi
So muss es sein:

Ein "Getter" sollte nie das zurückgebende Objekt erzeugen, da dies für den Benutzer des Properties nicht ersichtlich ist. Und nur weil du der einzige bist, der dieses Property benutzt, heißt das noch lange nicht, dass du die Hintergrundinformation auch noch ein Jahr später hast und somit eine Fülle an Speicherlecks produzierst.

Helmi 26. Apr 2008 10:58

Re: Problem mit StringList als Property
 
We würdest du es dann machen?

dominikkv 26. Apr 2008 11:07

Re: Problem mit StringList als Property
 
Delphi-Quellcode:
property EinAusgabe_StringList_Tasten : TStringList
  read FEinAusgabe_StringList_Tasten write FEinAusgabe_StringList_Tasten;

SirThornberry 26. Apr 2008 11:46

Re: Problem mit StringList als Property
 
wenn das Create bei dir die Lösung ist deutet es darauf hinn das du im Constructor deiner Componente dies versäumt hast. Das Create gehört einmalig in den Constructor und eintsprechend ein Free/Destroy in den Destructor.

Helmi 26. Apr 2008 12:53

Re: Problem mit StringList als Property
 
Zitat:

Zitat von SirThornberry
wenn das Create bei dir die Lösung ist deutet es darauf hinn das du im Constructor deiner Componente dies versäumt hast. Das Create gehört einmalig in den Constructor und eintsprechend ein Free/Destroy in den Destructor.

Es handelt sich nicht um eine Komponente (scheint aber so) - das ist nur eine Einstellungsunit die eine StringList von der MainUnit erhält.
(mit anderen Worten: alles was von einer Unit zur anderen Unit übergeben werden muss wird über properties gemacht


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 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