![]() |
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:
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.
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; 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? |
AW: TStrings zwischenspeichern und wieder herstellen
Du weist ja nur Pointer zu, brauchst aber eine Kopie.
[edit] Oder in Langform:
Delphi-Quellcode:
[/edit]
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; |
AW: TStrings zwischenspeichern und wieder herstellen
Also muss ich per for-Schleife durch die Listen durch und jedes Item einzeln kopieren?
|
AW: TStrings zwischenspeichern und wieder herstellen
Nö, aber Du musst zumindest eine Instanz für die Kopie anlegen, siehe mein Edit.
|
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.
|
AW: TStrings zwischenspeichern und wieder herstellen
Super, funktioniert.
Danke ;) |
AW: TStrings zwischenspeichern und wieder herstellen
Unabhängig dessen, diese Zeile
Delphi-Quellcode:
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.
CanClose := true;
.. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:43 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