Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi TStrings zwischenspeichern und wieder herstellen (https://www.delphipraxis.net/173338-tstrings-zwischenspeichern-und-wieder-herstellen.html)

Mazen 18. Feb 2013 12:50

TStrings zwischenspeichern und wieder herstellen
 
Hallo,

ich habe folgendes Problem:
Ich öffne über einen Button ein neues Formular mit 2 ListBoxen. Deren Inhalt möchte ich bei OnShow in einer Variable zwischenspeichern um diese in OnCloseQuery wiederherstellen zu können falls der Benutzer seine Änderung verwerfen möchte. Dazu habe ich folgenden Aufbau:

tempListShow und tempListHide sind vom Typ TStrings.
Delphi-Quellcode:
procedure TfrmBuchungscodes.FormShow(Sender: TObject);
begin
  tempListShow := listboxShow.Items;
  tempListHide := listboxHide.Items;
end;
Delphi-Quellcode:
procedure TfrmBuchungscodes.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
var
  mb_erg: Integer;
begin
  if buttonClose = false then
  begin
    mb_erg := MessageBox(Application.Handle,pchar('Sollen die Änderungen übernommen werden?'), pchar('Änderungen übernehmen?'), MB_YESNOCANCEL + MB_ICONQUESTION);
    if mb_erg = ID_YES then
      CanClose := true
    else if mb_erg = ID_NO then
    begin
      listboxShow.Items := tempListShow;
      listboxHide.Items := tempListHide;
      CanClose := true;
    end
    else if mb_erg = ID_CANCEL then
      CanClose := false;
  end;
end;
Schließe ich das Formular nun mit "OK", übernehme also die Änderungen so ist der Inhalt beim nächsten Öffnen genau so wie ich es geändert habe.
Verlasse ich das Formular aber mit "Abbrechen" um die Änderungen zu verwerfen finde ich beim nächsten Öffnen des Formulars 2 leere ListBoxen vor.

Kann mir jemand sagen wo hier mein (Denk)fehler liegt?

DeddyH 18. Feb 2013 13:08

AW: TStrings zwischenspeichern und wieder herstellen
 
Du weist ja nur Pointer zu, brauchst aber eine Kopie.
[edit] Oder in Langform:
Delphi-Quellcode:
procedure TfrmBuchungscodes.FormCreate(Sender: TObject);
begin
  tempListShow := TStringlist.Create;
  tempListHide := TStringlist.Create;
end;

procedure TfrmBuchungscodes.FormDestroy(Sender: TObject);
begin
  tempListShow.Free;
  tempListHide.Free;
end;

procedure TfrmBuchungscodes.FormShow(Sender: TObject);
begin
  tempListShow.Assign(listboxShow.Items);
  tempListHide.Assign(listboxHide.Items);
end;
[/edit]

Mazen 18. Feb 2013 13:09

AW: TStrings zwischenspeichern und wieder herstellen
 
Also muss ich per for-Schleife durch die Listen durch und jedes Item einzeln kopieren?

DeddyH 18. Feb 2013 13:14

AW: TStrings zwischenspeichern und wieder herstellen
 
Nö, aber Du musst zumindest eine Instanz für die Kopie anlegen, siehe mein Edit.

Uwe Raabe 18. Feb 2013 13:19

AW: TStrings zwischenspeichern und wieder herstellen
 
Es sollte auch nicht unerwähnt bleiben, daß die Variablen zwar vom Typ TStrings sein dürfen, aber mit TStringList.Create erzeugt werden müssen. TStrings implementiert als abstrakte Klasse keine Speicherung der Strings.

Mazen 18. Feb 2013 13:20

AW: TStrings zwischenspeichern und wieder herstellen
 
Super, funktioniert.
Danke ;)

Popov 18. Feb 2013 15:39

AW: TStrings zwischenspeichern und wieder herstellen
 
Unabhängig dessen, diese Zeile
Delphi-Quellcode:
      CanClose := true;
..
kannst du dir sparen, denn jedes Mal wenn die Prozedur neu aufgerufen wird, ist sie wieder True, auch wenn sie vorher False gestellt wurde. Im Grunde ist nur False Änderung wichig.


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