Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

beim wechsel in nächsten Datensatz funktioniert "Form.SetFocus" nicht

Begonnen von KonradR, November 11, 2023, 11:45:15

⏪ vorheriges - nächstes ⏩

KonradR

Hallo liebe Accessfreunde,

ich habe ein Formular mit mehreren Textfeldern, die einen Datensatz befüllen.
Wenn ich in den nächsten Datensatz wechsle, möchte ich, dass der Inhalt eines bestimmten Feldes, es hört auf den Namen "txtrezepMenge", geprüft wird. Wenn in dem Textfeld nichts steht, dann soll eine Eingabe erzwungen werden, bevor ich in den nächsten Datensatz wechseln kann. Mein bisher entwickelter Code sieht so aus:
Private Sub txtrezepMenge_Exit(Cancel As Integer)
    If IsNull(Me!txtrezepMenge) Then
        MsgBox "bitte die Anzahl der Rezepte in Feld 'Anz./Rez.' eingeben"
        Me!txtrezepMenge.SetFocus
    End If
End Sub

Die MsgBox wird zwar angezeigt, aber der Datensatzzeiger wechselt in den nächsten Datensatz und das betreffende Textfeld erhält nicht den Fokus. Wie kann ich ereichen, dass das Textfeld "txtrezepMenge" den Fokus erhält und ein Datensatzwechsel nicht möglich ist, solange nichts im Textfeld steht?

Beaker s.a.

Hallo Konrad,

Falsches Ereignis, - verwende "Vor Aktualisierung".
Die Prozedur zu diesem Event (txtrezepMenge_BeforeUpdate) bietet den
Parameter "Cancel" an. Wenn du den bei leerem Feld auf True setzt
Cancel = Truewird die Prozedur abgebrochen, es wird nicht gespeichert und das Feld
wird gar nicht erst verlassen. SetFocus entfällt dann.
Damit kannst du auch auf falsche Eingaben prüfen, und mit
Me.txtrezepMenge.Undogleich wieder löschen.

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)

KonradR

Zitat von: Beaker s.a. am November 11, 2023, 11:57:38Falsches Ereignis, - verwende "Vor Aktualisierung".
Die Prozedur zu diesem Event (txtrezepMenge_BeforeUpdate) bietet den
Parameter "Cancel" an. Wenn du den bei leerem Feld auf True setzt
Code [Auswählen] Erweitern
Cancel = True

Hallo  Beaker s.a.,

danke für deine Antwort. Ich habe meinen Code gemäß deinen Empfehlungen angepasst. Beim Ereignis "..._BeforeUpdate" wird einfach der Datensatz gewechselt, ohne das was passiert. Jetzt habe ich für das Ereignis "..._Exit" den Parameter Cancel auf True gesetzt (Cancel = True) und es funktioniert. Hier noch mein Code der funktioniert:
Private Sub txtrezepMenge_Exit(Cancel As Integer)
    If IsNull(Me!txtrezepMenge) Then
        MsgBox "bitte die Anzahl der Rezepte in Feld 'Anz./Rez.' eingeben"
        Cancel = True
    End If
End Sub

Das mit dem Parameter war die Lösung. Danke für deine Hilfe.

MzKlMu

Hallo,
hast Du nur das eine Pflichtfeld ?

Im Regelfall nimmt man zur Datenvalidierung das Formular Ereignis "Vor Aktualisierung" (Form_BeforeUpdate) und prüft dort alle Felder. Bei einem Fehler wird mit Cancel=True abgebrochen.
Und dann gibt es nur eine Meldung.
Gruß Klaus

Beaker s.a.

Hallo Konrad,

Wahrscheinlich hast du einfach nur im Code das "Exit" durch
"BeforeUpdate" ersetzt. Das bekommt das Steuerelement aber
nicht mit. Da musst du im Entwurfsansicht die Eigenschaft
"Vor Aktualisierung" manuell auf "Ereignisprozedur" einstellen.
Wenn du Steuerelement und Prozedur aus den beiden Dropdowns am
oberen Rand des Modulfensters auswählst wird das autom. eingefügt.

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)

KonradR

Hallo Beaker s.a.,

Zitat von: Beaker s.a. am November 11, 2023, 17:27:53Wahrscheinlich hast du einfach nur im Code das "Exit" durch
"BeforeUpdate" ersetzt. Das bekommt das Steuerelement aber
nicht mit. Da musst du im Entwurfsansicht die Eigenschaft
"Vor Aktualisierung" manuell auf "Ereignisprozedur" einstellen.
Wenn du Steuerelement und Prozedur aus den beiden Dropdowns am
oberen Rand des Modulfensters auswählst wird das autom. eingefügt.

Wahrscheinlich wars so. Jetzt habe ich den Code für das Ereignis "BeforeUpdate" eingefügt und in den Eigenschaften "Ereignisprozedur" ausgewählt und es klappt auch.

KonradR

Hallo MzKlMu,

Zitat von: MzKlMu am November 11, 2023, 13:36:29hast Du nur das eine Pflichtfeld ?

Danke für den Tip. Aber ich habe nur das eine Pflichtfeld.