AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

onChange Ereignis

Ein Thema von Crowbar · begonnen am 12. Feb 2015 · letzter Beitrag vom 12. Feb 2015
Antwort Antwort
Crowbar

Registriert seit: 17. Jun 2002
43 Beiträge
 
#1

onChange Ereignis

  Alt 12. Feb 2015, 10:51
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.

Grüße
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: onChange Ereignis

  Alt 12. Feb 2015, 10:58
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.
Markus Kinzler
  Mit Zitat antworten Zitat
Crowbar

Registriert seit: 17. Jun 2002
43 Beiträge
 
#3

AW: onChange Ereignis

  Alt 12. Feb 2015, 11:04
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: onChange Ereignis

  Alt 12. Feb 2015, 11:05
Könnte man nicht die Modified-Eigenschaft von TCustomEdit dazu verwenden?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: onChange Ereignis

  Alt 12. Feb 2015, 11:05
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: onChange Ereignis

  Alt 12. Feb 2015, 11:23
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 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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Crowbar

Registriert seit: 17. Jun 2002
43 Beiträge
 
#7

AW: onChange Ereignis

  Alt 12. Feb 2015, 11:42
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 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.
Vielen Dank!
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: onChange Ereignis

  Alt 12. Feb 2015, 11:47
Du musst allerdings zunächst beide Teile synchronisieren und FHasChanges auf False setzen, sonst geht das schief, aber das sollte eh offensichtlich sein.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 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