Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: itwebmaster am März 28, 2025, 15:08:33

Titel: Bei Taste UP und DOWN im Feld verbleiben
Beitrag von: itwebmaster am März 28, 2025, 15:08:33
Ich habe ein Feld in bei dem der Zeitraum im Format MM.JJJJ bei den Tasten UP und DOWN hoch bzw. runtergezählt wird, das funktioniert mit folgendem Code super:
Private Sub Zeitraum_KeyUp(KeyCode As Integer, Shift As Integer)
On Error Resume Next
'MsgBox "Tastencode=" & KeyCode
'38 nach oben
'40 nach unten

oldDate = DateValue("1." & Me.Zeitraum)

Debug.Print oldDate

Select Case KeyCode
    Case Is = 38
        Me.Zeitraum = Format(DateAdd("m", 1, oldDate), "mm.yyyy")
        myoldvalue = Null
        Me.Zeitraum.SetFocus
    Case Is = 40
        Me.Zeitraum = Format(DateAdd("m", -1, oldDate), "mm.yyyy")
        Me.Zeitraum.SetFocus
        myoldvalue = Null
    Case Is = 80
        myoldvalue = Me.Zeitraum
        DoCmd.RunCommand acCmdQuickPrint
        'Me.Zeitraum = Me.Zeitraum.OldValue
    Case Else
        'MsgBox "Sie haben die Taste mit dem Tastencode " & KeyCode & " gedrückt."
End Select
Me.Zeitraum.SetFocus
End Sub
Leider muss ich immer wieder in das Feld zurückspringen. Die Methode SetFocus bringt leider nichts. Hat jemand eine Idee?
Titel: Re: Bei Taste UP und DOWN im Feld verbleiben
Beitrag von: Knobbi38 am März 28, 2025, 15:27:29
1. Du solltest nur aus wichtigem Grund in das Fokushandling eines Formulars eingreifen und außerdem ist das hier gar nicht notwendig - man "konsumiert" einen Tastendruck, in dem man dem KeyCode eine 0 zuweist. Damit wird die weitere Verarbeitung von Up/Down unterdrückt.

2. Schau dir nochmal die Syntax von Select Case an. Ein "Case is = 38"  ist hier ebenfalls nicht notwendig. Es reicht ein einfaches "Case 38".

3. Key-Ereignisroutinen sollten möglichst kurz sein. Deshalb gehört da auch kein Msgbox oder Docmd.RunCommand rein.

Titel: Re: Bei Taste UP und DOWN im Feld verbleiben
Beitrag von: Beaker s.a. am März 29, 2025, 13:07:21
Hallo,

Was Ulrich meint ist, in den Cases brauchst du kein .SetFocus, du hast es
ja am Ende der Prozedur.
Dieses ersetzt du aber mit
KeyCode = 0und der Cursor bleibt wo er ist.

gruss ekkehard