Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   onChange Ereignis (https://www.delphipraxis.net/183896-onchange-ereignis.html)

Crowbar 12. Feb 2015 10:51

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

mkinzler 12. Feb 2015 10:58

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.

Crowbar 12. Feb 2015 11:04

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.

DeddyH 12. Feb 2015 11:05

AW: onChange Ereignis
 
Könnte man nicht die Modified-Eigenschaft von TCustomEdit dazu verwenden?

Der schöne Günther 12. Feb 2015 11:05

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.

Sir Rufo 12. Feb 2015 11:23

AW: onChange Ereignis
 
Hattest du an sowas in der Art gedacht?
Delphi-Quellcode:
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;
Generell sollte man die Speicherung der Daten in einer separaten Klasse auslagern und diese Klasse sorgt dann für die Verwaltung des Status
Delphi-Quellcode:
HasChanged
, 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.

Crowbar 12. Feb 2015 11:42

AW: onChange Ereignis
 
Zitat:

Zitat von Sir Rufo (Beitrag 1289639)
Hattest du an sowas in der Art gedacht?
Delphi-Quellcode:
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;
Generell sollte man die Speicherung der Daten in einer separaten Klasse auslagern und diese Klasse sorgt dann für die Verwaltung des Status
Delphi-Quellcode:
HasChanged
, 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.

Ja, an so eine Art habe ich gedacht. Werde mir Dein Beispielcode für mein Programm entsprechend anpassen und schauen, ob es klappt. :wink:
Vielen Dank!

Sir Rufo 12. Feb 2015 11:47

AW: onChange Ereignis
 
Du musst allerdings zunächst beide Teile synchronisieren und
Delphi-Quellcode:
FHasChanges
auf
Delphi-Quellcode:
False
setzen, sonst geht das schief, aber das sollte eh offensichtlich sein.


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