Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Inhaltsänderg. direkt in OnChange-Ereignis rückgängig machen (https://www.delphipraxis.net/98933-inhaltsaenderg-direkt-onchange-ereignis-rueckgaengig-machen.html)

little-x 4. Sep 2007 11:20


Inhaltsänderg. direkt in OnChange-Ereignis rückgängig machen
 
Hallo!

Ich habe ein Feld einer TTable. Diese Komponente (TStringField) hat ja auch sein eigenes OnChange-Event. Wenn das Feld jetzt den Wert erster Wert besitzt, und ich gehe rein und ändere den Wert in zweiter Wert, wird das Ereignis ja ausgelöst. Jetzt soll in dem Ereignis dafür gesorgt werden, dass wenn der Wert der Plausibilitätsprüfung nicht standhält, der ursprüngliche Wert, also erster Wert wiederhergestellt wird.

Ich wüsste mir nicht anders zu helfen, als mir den Wert in einer anderen Variable zu speichern und diesen dann dem Control wieder zuzuweisen. Das ist aber doch recht umständlich (da brauche ich ja bei einer Form mit 20 Controls 20 Variablen, bei denen ich auch noch ständig aufpassen muss dass diese auch ja immer den richtigen Wert haben).

Einfacher wäre eine Standardmethode, die ich aber nicht gefunden habe. Gibt es eine solche, oder hat jemand eine ganz andere Idee?

Danke und Viele Grüße!

ps. Hab die Suche schon bemüht, aber ich habe nichts in der Richtung gefunden...

Reinhard Kern 4. Sep 2007 14:04

Re: Inhaltsänderg. direkt in OnChange-Ereignis rückgängig ma
 
Zitat:

Zitat von little-x
Hallo!

Ich habe ein Feld einer TTable. Diese Komponente (TStringField) hat ja auch sein eigenes OnChange-Event. Wenn das Feld jetzt den Wert erster Wert besitzt, und ich gehe rein und ändere den Wert in zweiter Wert, wird das Ereignis ja ausgelöst. Jetzt soll in dem Ereignis dafür gesorgt werden, dass wenn der Wert der Plausibilitätsprüfung nicht standhält, der ursprüngliche Wert, also erster Wert wiederhergestellt wird.

Ich wüsste mir nicht anders zu helfen, als mir den Wert in einer anderen Variable zu speichern und diesen dann dem Control wieder zuzuweisen. Das ist aber doch recht umständlich (da brauche ich ja bei einer Form mit 20 Controls 20 Variablen, bei denen ich auch noch ständig aufpassen muss dass diese auch ja immer den richtigen Wert haben).

Einfacher wäre eine Standardmethode, die ich aber nicht gefunden habe. Gibt es eine solche, oder hat jemand eine ganz andere Idee?

Danke und Viele Grüße!

ps. Hab die Suche schon bemüht, aber ich habe nichts in der Richtung gefunden...

Hallo,

der richtige Weg, aber aufwendig: die Ableitung einer eigenen Komponente von TStringField mit einem Feld für den letzten gültigen Wert und einer eingebauten Plausibilitätsprüfung, die diesen Wert bei ungültigen Eingaben wiederherstellt. Dann herrscht Ordnung: Field1.LastValidEntry gehört eben zum Objekt Field1, und man kann den Zugriff mit den üblichen Verfahren regeln (private, protected usw.). Externe Variablen sind für den Zweck ziemlich fehleranfällig.

Gruss Reinhard

little-x 4. Sep 2007 15:47

Re: Inhaltsänderg. direkt in OnChange-Ereignis rückgängig ma
 
Zitat:

Externe Variablen sind für den Zweck ziemlich fehleranfällig.
Dem stimme ich zu. Die Sache mit der abgeleiteten Komponente hatte ich inzwischen auch im Sinn - wäre sauberer. Zwar umständlich, aber wenn es einmal läuft, sind Fehler eigentlich ausgeschlossen.

Die Faulheit hat aber inzwischen gesiegt... hab es inzwischen mit externen Variablen gelöst. Wenn ich das Problem noch öfter kriege, werd ich aber wohl eine Komponente ableiten.

Viele Grüße!

marabu 4. Sep 2007 19:41

Re: Inhaltsänderg. direkt in OnChange-Ereignis rückgängig ma
 
Hallo,

Zitat:

Zitat von little-x
... Einfacher wäre eine Standardmethode, die ich aber nicht gefunden habe. Gibt es eine solche, oder hat jemand eine ganz andere Idee? ...

vielleicht möchtest du dir das Ereignis OnValidate() des Feldes (TField) anschauen? In dem Zusammenhang werden dich auch die Eigenschaften OldValue und NewValue interessieren.

Grüße vom marabu


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