Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

SetFocus funktioniert nicht

Begonnen von KaJo, Oktober 16, 2022, 17:15:55

⏪ vorheriges - nächstes ⏩

KaJo

Hallo,
ich habe ein ungebundenes Formular.
Auf dem Formular ist eine Textbox und ein Button.
In die Textbox wird die Seriennummer eingegeben.
Wenn ich auf den Button drücke (_Click), dann wird
1. überprüft, ob die Seriennummer existiert
   1.1. wenn ja, dann läuft der Code weiter
   1.2. wenn nein, dann wird abgebrochen
2. überprüft, ob die Seriennummer schon eingelagert wurde,
   2.1. wenn ja, dann wird abgebrochen
   2.2. wenn nein, dann wird ein Datensatz angelegt
3. der Focus auf die Textbox gesetzt.
Dies funktioniert einwandfrei.

Wenn ich die Seriennummer eingebe und beim Abschluß der Eingabe mit Enter das _Click-Ereignis
des Buttons aufrufe, dann werden die Prüfungen und Neuanlagen von Datensätzen korrekt abgearbeitet.

Allerdings wir der Focus -obwohl der gleiche Code durchlaufen wird - nicht auf die Textbox gesetzt.

Wie kann man den Focus auf die Textbox 'zwingen'.
Vielen Dank im Voraus.

Beaker s.a.

Hallo KaJo,
Zitatbeim Abschluß der Eingabe mit Enter das _Click-Ereignis
des Buttons aufrufe,
Das macht man nicht. Ereignisprozeduren werden nur durch das zugehörige
Event ausgelöst.
Verlagere deinen Code in die Ereignisprozedur
Private Sub DeinTextfeld_BeforeUpdate(Cancel As Integer)Hier gehören Prüfungen, wie du sie durchführst, hin. Den Abbruch erreichst
du indem du den Parameter "Cancel" an geeigneter Stelle auf "True" setzt.
Da bleibt dann auch der Cursor im Feld. Den Button kannst du trotzdem
statt "Enter" verwenden, wenn's denn sein muss, da beim Click auf diesen
das Textfeld den Focus verliert, wodurch o.a. Event ausgelöst wird.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

KaJo

Hallo Beaker,
vielen Dank für Deine Antwort.
Die Hinweise kann ich leider nicht so umsetzen, weil das Textfeld nicht gebunden ist und weil ich im Textfeld im Ereignis _KeyDown überprüfen muß, ob die Enter-Taste gedrückt wurde.
Ich muß den Code bei
Public Sub txtSerienNummer_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyReturn Then

       ....
    End if
unterbringen.
wenn ich nach einer Prüfung mit 'exit sub' abbreche, dann ist der Cursor trotsdem nicht wieder im Textfeld.
MfG
Kajo

MzKlMu

Hallo,
was zu der Frage führt:
Warum verwendet man ungebundene Formulare und verschenkt einer der Hauptfunktionalitäten von Access ?

Auch mit gebunden Formularen kann man eine Datenvalidierung durchführen und das Speichern unvollständiger Datensätze verhindern. Mit bedeutend weniger Code als ungebunden.
Gruß Klaus

KaJo

Hallo,
ich habe das Problem leider noch nicht lösen können und folgendes ausprobiert:
Am Ende des Codes setze ich den Focus auf die Textbox und lass mir im Direktfenster anzeigen, wer den Focus hat
...
Me.txtSerienNummer.SetFocus
       
Debug.Print Screen.ActiveControl.Name   | Im Direktfenster steht: txtSerienNummer

D.h. die Textbox hat tatsächlich den Focus, "kann es aber nicht so richtig zeigen", weil der Cursor nicht in der Textbox blinkt.
Gibt es bzgl. 'Focus' verschiedene Arten?
Ich komme leider nicht weiter, muss aber dies lösen, weil mit einem Scanner, der die Seriennummer liefert und anschließend ein [ENTER].

Für Hinweise bin ich dankbar.


markusxy

Zitat von: KaJo am Oktober 23, 2022, 10:56:31Gibt es bzgl. 'Focus' verschiedene Arten?

Nein.


Zitat von: KaJo am Oktober 23, 2022, 10:56:31Ich komme leider nicht weiter

Ohne den Code zu sehen, macht es keinen Sinn nachzudenken.

PhilS

Zitat von: KaJo am Oktober 17, 2022, 19:16:38wenn ich nach einer Prüfung mit 'exit sub' abbreche, dann ist der Cursor trotsdem nicht wieder im Textfeld.
Genau hier liegt dein Problem in Form einer falschen Annahme.


Warum sollte der Cursor nach Exit Sub wieder/weiterhin im Textfeld sein?

Mit Exit Sub wird die aktuelle (Ereignis-)Prozedur verlassen. Das ändert im Fall der KeyDown-Ereignisprozedur aber überhaupt nichts daran, dass [Enter] gedrückt wurde und damit der Focus zum nächsten Feld verschoben wird nachdem die KeyDown-Ereignisprozedur ausgeführt wurde.

Wenn du willst, dass der Tastendruck nach der KeyDown-Ereignisprozedur nicht normal weiterverarbeitet wird, musst du das explizit veranlassen, indem du den KeyCode änderst. Z.B. auf 0 setzt.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

KaJo

Hallo PhilS,
vielen Dank, das war der richtige Hinweis.
Ich hatte tatsächlich einen Denkfehler.
Am Ende meines Codes habe ich nur ergänzt
keycode = 0
Shift = 0.
Dies hat dazu geführt, dass der Cursor im Textfeld geblieben ist.
Nochmals vielen Dank, auch an alle, die hier im Forum ihre Zeit 'opfern' um anderen zu helfen.