Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Ereignisbehandlung in eigener Komponente soll erhalten bleib


UweK - Mi 25.04.18 11:11
Titel: Ereignisbehandlung in eigener Komponente soll erhalten bleib
Guten Tag

Ich habe eine verschönerte Komponente TMyEdit = class(TEdit) geschrieben. Diese prüft beim Verlassen in ihrem Ereignis OnExit automatisch, ob der Eingabetext eine korrekte Fließkommazahl darstellt, und färbt widrigenfalls den Eingabetext rot. Von diesem TMyEdit habe ich mehrere Instanzen in meinem Formular. Hier möchte ich im OnExit einer jeden Instanz eine gültige Eingabe automatisch in eine zugehörige Zahlen-Variable schreiben, und für jede ungültige Eingabe eine individuelle Fehlermeldung anzeigen. Jeweils einzeln funktioniert das. Wenn ich den OnExits im Formular aber Prozeduren zuweise, verschwindet leider das ursprünglich in TMyEdit implementierte Verhalten. Da wird wohl das ursprüngliche OnExit durch das neue OnExit nicht ergänzt, sondern ersetzt.

Wie kann ich erreichen, dass beides ausgeführt wird, zuerst das Umfärben (das für jede Instanz das gleiche Verhalten zeigen soll und deshalb am besten in der Komponente liegt), und dann die Variablenzuweisung (die für jede Instanz verschieden ist und deshalb nur im Formular liegen kann)?

Vielen Dank für Tipps.


jasocul - Mi 25.04.18 11:39

Das existierende OnExit merken und dann an der richtigen Stelle zusätzlich aufrufen.


Sinspin - Mi 25.04.18 11:52

Da es sich ja um eine abgeleitete Komponente handelt hast Du Zugriff auf die als protected deklarierten Methoden.
Also kannst Du DoExit überschreiben. Aber dann nicht vergessen via inherited die geerbte Methode aufzurufen.


jaenicke - Mi 25.04.18 14:23

user profile iconjasocul hat folgendes geschrieben Zum zitierten Posting springen:
Das existierende OnExit merken und dann an der richtigen Stelle zusätzlich aufrufen.
Das sollte man wirklich nur im äußersten Notfall machen. Wenn eine Komponente sauber entworfen ist, geht es normalerweise auch sauber, meistens so wie es user profile iconSinspin für diesen Fall beschrieben hat.


jasocul - Mi 25.04.18 15:06

user profile iconSinspin und user profile iconjaenicke haben natürlich Recht.
Wenn du schon eine eigene Komponente erstellt hast, dann solltest du meinen Vorschlag ignorieren. :wink:


UweK - Mi 25.04.18 17:41

Vielen Dank. Das DoExit ist die Lösung.