PDA

Vollständige Version anzeigen : Keypress Problematik


Hausdrache
23.10.2003, 22:02
Folgendes Problem:

Ich habe ein Haupt- und auf diesem ein Unterformular.
Per Button-Klick (VBA-Code) wird
1.) eine Abfrage ausgeführt und die Daten im Unterformular dargestellt (Endlosformular)
2.) das Unterformular erhält den Focus
3.) ein Textfeld des Unterformulars erhält den Focus (laut Onlinehilfe soll man das so trennen?!)

so weit so gut. Nach Button-Klick wird die Abfrage ausgeführt, das Unterformular aktualisiert und der Cursor steht auf dem obersten Textfeld.

Nun soll bei Bedarf bei Ereignis Keypress ein weiteres Formular (Frm_2) aktualisiert werden, welches auf dem Textfeld basiert, welches den Focus hatte:

Sub Form_Keypress (Keyascii as Interger)

IF Keyascii = 13 then

.......

End IF

End Sub

Das entsprechende Formular (frm_2) wird auch aktualisiert, jedoch auf Basis des Textfeldes, welches unter dem Textfeld stand, welches des Focus hatte, also auf Basis des nächstfolgenden Datensatzes. (als ob der Focus erst einen Datensatz weiterspringt und dann die Aktualisierung ausführt)


Wer hatte bereits ein ähnliches Problem und kann mir weiterhelfen?

PS: habe es auch schon mit Keydown, Tastenvorschau JA/NEIN, .. probiert.

Vielen Dank - der Hausdrachen

Johnny Loser
24.10.2003, 05:35
...welches auf dem Textfeld basiert, welches den Focus hatte:
Wo befindet sich der Focus denn nach Betätigen der Eingabetaste?

IF Keyascii = 13 then

.......

End IF
Wofür steht "......."? Die Abbildung des gesamten Codes würde uns die Beantwortung Deiner Frage möglicherweise erleichtern...

...als ob der Focus erst einen Datensatz weiterspringt...
Ich gehe mal davon aus, das tut er auch...

"Form_KeyPress" des Hauptformulars oder Unterformulars?

Welcher Datensatz ist denn aktiv, im Moment, daß die Aktualisierung ausgeführt wird?
Setze doch mal einen Haltepunkt in die erste Zeile Deiner Prozedur und verfolge im Debugger per Einzelschritt, wie der Focus wandert und laß Dir die Werte, die Deiner Abfrage übergeben werden mit Debug.Print im Direktfenster ausgeben.

Paul.Ostermeier
24.10.2003, 06:33
probier's mal so..

Sub Form_Keypress (Keyascii as Interger)

IF Keyascii = 13 then
KeyAscii = 0
.......

End IF

End Sub

Das Argument KeyAscii wird als Referenz übergeben. Wird dieses Argument geändert, wird ein anderes Zeichen an das Objekt gesendet. Bei Verwendung des Wertes 0 für KeyAscii wird der Tastenanschlag annulliert, so dass das Objekt nicht erkennt, dass eine Taste gedrückt wurde.

Hausdrache
24.10.2003, 22:19
Sorry, dass ich jetzt erst antworte, aber ich komme am Tag meist nicht an den Rechner.

Ich habe selbst noch etwas probiert:

Statt
"IF Keyascii = 13 then"
habe ich
"IF Keyascii = 32 then"
verwendet, also statt der Entertaste die Leertaste. Und damit läuft es so, wie ich es mir gedacht habe. Damit will ich nicht sagen, dass programmiermässig sauber ausschaut.

Ich kann es mir nur so erklären, dass der Code für ENTER den Focus einen Datensatz weiterrückenlässt und diesen diesen dann als Basis für die Abfrage nimmt. Wohingegen der Code für LEERTASTE genau den Datensatz nimmt, auf welchem der Focus lag.