| Die Checkbox und ihr Enter/Return-Verhalten |
|
| Development |
| Thursday, 17 August 2006 17:15 |
|
Das Problem Interessant wird es erst im Zusammenspiel mit anderen Klassen als Control der Spalte. Etwa der Checkbox. Das normale Verhalten der Checkbox bei Tasteneingaben in Visual FoxPro sieht kurz gesagt so aus: Space - Änderung des Zustands Nun gut, damit kann man leben und das Verhalten erscheint auf den ersten Blick intuitiv. Nur... wir wollen innerhalb des Grid nur Navigieren und nicht den Zustand der Checkbox verändern. Die erste Idee *==================================================================== * Erweiterung: Die Return/Enter-Taste soll keine Funktion besitzen. * Das Problem ist, dass primär mit der Enter- neben der * Tab-Taste in den Formularen und Grids navigiert wird. *==================================================================== LPARAMETERS nKeyCode, nShiftAltCtrl If (m.nKeyCode == 13 .And. InList(m.nShiftAltCtrl, 0, 1)) .Or. ; Keyboard '{TAB}' DoDefault() Wir verändern das Verhalten der Checkbox soweit, dass die Enter/Return-Taste ihre Funktionalität verliert und der Wechsel durch das Auslösen der Tab-Taste wiederhergestellt wird. Ein kurzer Test mit der erweiterten Klasse auf einem Formular funktioniert soweit tadellos. Fein... Das Extra - VFP Grid Nun, was ändert sich den wirklich? Beim Steppen im Debugger ergibt sich, dass das Checkbox.Value nicht verändert wird. Soweit entspricht dies der Verwendung auf einem Formular oder innerhalb eines Containers. Aber... wir haben eine ControlSource und anscheinend verhält sich VFP in der Art, dass zwar der Wert der Checkbox unverändert bleibt, aber trotzdem die ControlSource geändert wird und aus der Aktualisierung heraus, wechselt dann die Checkbox doch ihren Wert. Interessanterweise passiert dies nicht, wenn die Checkbox mit eigener ControlSource genutzt wird. Da ich keine Möglichkeit gefunden habe die Wertänderung in der Column.ControlSource zu verhindern, nutze ich die 'Technik der doppelten Negation' :icon_cool: um zum gewünschten Ergebnis zu kommen. Innerhalb des KeyPress prüfe ich auf die Existenz des Parent von der Basisklasse 'Column' und verändere den aktuellen Wert der Checkbox. Da VFP ebenfalls eine Invertierung des Value durchführt, enden wir wieder beim ursprünglichen Zustand. Außerdem vermeiden wir das 'Drücken' der Tab-Taste, da wir ja in die nächste Spalte wechseln wollen... Die Lösung *==================================================================== * Erweiterung: Die Return/Enter-Taste soll keine Funktion besitzen. * Das Problem ist, dass primär mit der Enter- neben der * Tab-Taste in den Formularen und Grids navigiert wird. *==================================================================== LPARAMETERS nKeyCode, nShiftAltCtrl With This If .lSkipEnter .And. ( ; m.llColumn = (Vartype(This.Parent) == T_OBJECT .And. ; .Value = ICase( ; NoDefault DoDefault() Der Code ist in der ersten Ableitung implementiert und durch das Setzen der Checkbox.lSkipEnter kann sowohl in Ableitungen wie auch Instanzen der Checkbox das Verhalten reguliert werden. Interessant wie der Fuchs wieder die ganze Sache handhabt, aber okay... es ist nachvollziehbar. Welche Tricks und Erfahrungen habt ihr mit der Checkbox bisher gemacht?
|





