![]() |
onChange Ereignis
Hallo,
ich habe eine TForm, worauf ein TNotebook mit 3 auswählbaren "Pages" liegen. Nun möchte ich beim Schliessen der TForm überprüfen, ob irgendwelche Textänderungen in den "Edit's", die auf den 3 Seiten verteilt sind, durchgeführt wurden. Natürlich kann ich von jedem "Edit" das onChange-Ereignis abrufen. Dies kann jedoch bei einer gewissen Anzahl von Edit's aufwendig werden. Meine Frage dazu, gibt es eine Möglichkeit, die gesamten onChange-Ereignisse auf einmal abzurufen? Dies würde mir etwas Programmcode ersparen. :wink: Grüße |
AW: onChange Ereignis
Der Change-Event tritt bei jeder Änderung auf. Ich verstehe nicht, wie Du den beim Schlieesen verwenden willst. Du kannst aber die selbe Methode für die Events aller Edits verwenden und darin den Sender auswerten.
|
AW: onChange Ereignis
Im Prinzip möchte ich vor dem eigentlichen Schliessen, eine Meldung ausgeben:
"Möchten Sie die Änderungen speichern?" ... natürlich nur, wenn auch Änderungen durchgeführt wurden, ansonsten nicht. |
AW: onChange Ereignis
Könnte man nicht die Modified-Eigenschaft von TCustomEdit dazu verwenden?
|
AW: onChange Ereignis
Da Delphi keine Multicast-Events hat wüsste ich auch nur, ein gemeinsames OnChange-Ereignis für alle Edits zu nehmen. Oder du rutscht anfangs einmal über alle TEdits die du auf dem Formular findest und speicherst dir eine Zuordnung
"Name der TEdit-Komponente" - "Edit-Inhalt" und beim Schließen vergleichst du ob sich der Inhalt wo geändert hat. |
AW: onChange Ereignis
Hattest du an sowas in der Art gedacht?
Delphi-Quellcode:
Generell sollte man die Speicherung der Daten in einer separaten Klasse auslagern und diese Klasse sorgt dann für die Verwaltung des Status
TMyForm = class( TForm )
Edit1 : TEdit; { OnChange => ControlChanged } Edit2 : TEdit; { OnChange => ControlChanged } private FHasChanged : Boolean; FValue1, FValue2 : string; procedure ChangeValue( var Variable : string; const Value : string; var HasChanged : Boolean ); published procedure ControlChanged( Sender : TObject ); end; procedure TMyForm.ChangeValue( var Variable : string; const Value : string; var HasChanged : Boolean ); begin if Variable <> Value then begin Variable := Value; HasChanged := True; end; end; procedure TMyForm.ControlChanged( Sender : TObject ); begin ChangeValue( FValue1, Edit1.Text, FHasChanged ); ChangeValue( FValue2, Edit2.Text, FHasChanged ); end;
Delphi-Quellcode:
, der dann einfach gemütlich abgefragt wird und dann gibt man genau diese Klasse zum Speichern. Die Form ist dann nur noch dafür da, wofür die gebaut wurde: Zur Kommunikation mit dem Benutzer und eben nicht auch noch Datenspeicher, Kontrolleur, etc.
HasChanged
|
AW: onChange Ereignis
Zitat:
Vielen Dank! |
AW: onChange Ereignis
Du musst allerdings zunächst beide Teile synchronisieren und
Delphi-Quellcode:
auf
FHasChanges
Delphi-Quellcode:
setzen, sonst geht das schief, aber das sollte eh offensichtlich sein.
False
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:30 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 by Thomas Breitkreuz