Manfred hat geschrieben:Hi,
ich finde im Moment nichts über die Reihenfolge, die eingehalten wird, wenn Slots eines Objektes abgefragt werden.
folgendes Beispiel
Code: Alles auswählen
:keyboard := {||bklablah}
:validate := {||bklablah}
:killinputfocus := {||bklablah}
Hallo Manfred,
die Reihenfolge kannst du z.B. mit MSGBOX() in den Codeblöcken ermitteln.
Aber soweit ich weiß gilt folgendes:
:KeyBoard wird immer aufgerufen wenn (irgend) eine Taste gedrückt wurde (Maus ??? wohl nicht). Da du in ein SLE oder MLE etc. ohne den Focus zu verlieren mehr Text eingeben darfst (von Ausnahmen wie AUTOTAB oder der druck auf TAB mal abgesehen) bleibt es nach dem Tastendruck im Control,
also KEIN KillInputFocus und KEIN Validate
Die Validate()-Methode entscheidet, ob das SLE gültig ist, also verlassen werden darf, also muss er VOR dem KillInputFocus geprüft werden. Wenn er .t. zurückgibt, darf das Control verlassen und KillInputFocus ausgelöst werden. Da ich hiermit aber nicht arbeite, kann ich das nicht genau sagen
Und KillInputFocus() wird erzeugt NACHDEM das Control den Eingabefocus schon verloren hat !!!
Eines ist auch wichtig, wenn man einen CodeBlock in einen Slot setzt ( z.B. bei :KeyBoard), wird die Methode zuerst aufgerufen, danach der Codeblock. Das Ereignis als solches ist also schon vorbei !
Wenn man aber statt dessen die Methode in einer eigenen abgeleiteten Klasse ändert, dann kann man z.B. die Verarbeitung verhindern - ob das sinnvoll ist muss man aber selbst wissen !