Hi,
mit o:validate() hat Jimmy natürlich vollkommen recht, aber ...
Code: Alles auswählen
::Name :killInputFocus := {| u1, u2, oSelf | IF(::IsValid(oSelf,1),::Tudies(1),NIL) }
::Nummer :killInputFocus := {| u1, u2, oSelf | IF(::IsValid(oSelf,2),::Tudies(2),NIL) }
::Datum :killInputFocus := {| u1, u2, oSelf | IF(::IsValid(oSelf,3),::Tudies(3),NIL) }
::Logic :killInputFocus := {| u1, u2, oSelf | IF(::IsValid(oSelf,4),::Tudies(4),NIL) }
das ist ein potentieller Kandidat für eine Endlosschleife, da muss man höllisch aufpassen !
Warum ...
Vorgabe:
Name und Nummer dürfen nicht leer sein und der Name darf noch nicht vorkommen.
Beide SLE sind beim Anfang leer, weil man ja was eigeben soll.
Der Kunde gibt einen Namen ein, der schon verwendet wurde und verlässt das Feld.
Was passiert:
Killinputfocus prüft valid(), während es schon im neuen Feld (Nummer) steht.
Es will den Fehler melden z.b. msgbox() ... damit wird auch Nummer verlassen und ...
auch dort wird valid() ausgeführt und die nächste Fehlermeldung will kommen,
wahrscheinlich muss diese aber warten, da die erste msgbox schneller ist.
Jede der Fehlerbehandlungsroutinen setzt den Focus ins eigene Feld und schon
gibt es die nächste Fehlermeldung ...
Mit solchen Schleifen habe ich bis zur Verzweiflung gekämpft, bevor ich umgestiegen bin auf:
1. Abgeleitete SLE die einfache Plausis prüfen können (z.B. J / N Eingaben => Meine Datum etc. Controls in der Wissensbasis
2. Seitenvalidierung, erst wenn ich "Speichern" drücke validiere ich den Inhalt aller Felder in einer Methode !
Diese meldet alle Probleme (färbt dabei auch die SLE ein) und setzt den Focus ins erste Problemfeld.
3. Wenn ich wirklich in KillInputfocus was benötige (z.B. enable()/disable() nach SLE Feldinhalt), rufe ich dort eine Methode auf,
die sich um alle solchen Sachen auf der Seite kümmert und auch andere SLE in Betracht ziehen kann.
Keinesfalls dürfen zwei SLE mit dieser Regelung in der TAB Reihenfolge hintereinander stehen ohne dass der zweite Aufruf
erkennen kann, dass gerade der erste noch in Bearbeitung ist ...