Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Eisman333 am Februar 01, 2022, 12:16:10

Titel: Andere Prozedur aufrufen verschiebt nur den Fokus
Beitrag von: Eisman333 am Februar 01, 2022, 12:16:10
Hallo Liebe Community,

ich habe in einem Formular ein Eingabefeld und einen Button der entsprechend den Filter setzt. Nun wollte ich das auch die Verwendung von Return im Eingabefeld den Filter setzt.
Dabei bin ich auf folgende Lösung gestoßen:

Private Sub txtSucheJL_KeyPress(KeyAscii As Integer)
    If KeyAscii = vbKeyReturn Then
        cmdSucheJL_Click
    End If
End Sub

Soweit so gut, aber wenn ich jetzt Text eingebe und dann Return verwende, wird zwar der Fokus auf den entsprechenden Button gesetzt aber der Filter selbst wird nicht gesetzt. Ich muss also zweimal Return drücken.

Folgend noch der Code für das Click Event des Button:
Private Sub cmdSucheJL_Click()
    Dim suchKriterium As String
    Dim suche As String 
    suche = Me.txtSucheJL & ""
    suchKriterium = "txtArtikelNr LIKE '" & suche & "*'"
    If suche = "" Or Len(suche) = 0 Then
        Me.Filter = ""
        Me.FilterOn = False
    Else
        Me.Filter = suchKriterium
        Me.FilterOn = True
    End If
End Sub

Testweise hatte ich auch einmal probiert das Click Event über
call cmdSucheJL_Click aufzurufen, das Ergebnis blieb aber unverändert. Beide Prozeduren sind natürlich im selben Modul.

Was genau muss ich anpassen damit nicht nur der Fokus gesetzt wird?
Vielen Dank im Voraus für eure Hilfe.

Viele Grüße
Kevin
Titel: Re: Andere Prozedur aufrufen verschiebt nur den Fokus
Beitrag von: PhilS am Februar 01, 2022, 13:08:08
Mal ein paar Stichpunkte, die dich zur Lösung führen können:
Titel: Re: Andere Prozedur aufrufen verschiebt nur den Fokus
Beitrag von: Eisman333 am Februar 01, 2022, 15:01:47
Zitat von: PhilS am Februar 01, 2022, 13:08:08Mal ein paar Stichpunkte, die dich zur Lösung führen können:
  • Deine KeyPress-Prozedur verschiebt nicht den Focus. Das passiert allein schon durch [Return].
  • Während der Focus auf der Textbox ist (bei Keypress), kannst du den aktuellen Inhalt der Textbox nur über die Text-Property abrufen. Die Value-Property wird erst aktualisiert, wenn das Control verlassen wird.
  • Value ist die Default Property: Me.txtSucheJL entspricht Me.txtSucheJL.Value
  • Deine cmdSucheJL_Click-Prozedur wird durch [Return] schon ausgelöst, aber in dem Moment ist die Value-Property noch nicht gesetzt.
  • Für deinen Zweck wäre das AfterUpdate-Ereignis der Textbox wahrscheinlich zielführender.
Erst einmal vielen Dank für die hilfreichen Tipps zum Verständnis, wieso es nicht funktioniert.

Gerade durch den letzten Tipp bin ich darauf gekommen, dass ein Button eigentlich gar nicht nötig ist da das AfterUpdate-Ereignis für diese Zwecke eigentlich perfekt ist (zumindest in meinem Fall).
Allerdings hatte ich vorher noch etwas ausprobiert von dem ich dachte dass es auch klappen sollte, dem war aber nicht so, vielleicht kannst du mir dazu noch einen Hinweis geben dass ich zumindest nachvollziehen kann wieso die folgende Lösung trotzdem nicht funktioniert hat:

Ich hatte den Code beim Click-Ereignis des Button so angepasst, dass die Text-Property der Textbox verwendet wird. Da dies aber ohne Fokus nicht geht hatte ich den vorher noch per SetFocus auf die Textbox gelegt. Der Button hat dann wie auch schon vor den Änderung ohne Probleme funktioniert aber das verwenden von Return in der Textbox immer noch nicht.
Wenn ich es richtig verstanden habe sollte der Ablauf doch dann so sein, dass ich Return drücke, dadurch wird der Fokus auf den Button gesetzt und gleichzeitig oder danach die Prozedur vom Button ausgelöst. Diese setzt den Fokus dann wieder auf die Textbox und arbeitet weiter. Das wäre dann ja im Prinzip identisch zu dem manuellen Fokus Wechsel der durch den Klick auf den Button zustande kommt. So zumindest mein Verständnis, allem Anschein nach habe ich da aber wohl noch etwas vergessen/übersehen.
Titel: Re: Andere Prozedur aufrufen verschiebt nur den Fokus
Beitrag von: PhilS am Februar 01, 2022, 15:30:27
Zitat von: Eisman333 am Februar 01, 2022, 15:01:47Ich hatte den Code beim Click-Ereignis des Button so angepasst, dass die Text-Property der Textbox verwendet wird. Da dies aber ohne Fokus nicht geht hatte ich den vorher noch per SetFocus auf die Textbox gelegt. Der Button hat dann wie auch schon vor den Änderung ohne Probleme funktioniert aber das verwenden von Return in der Textbox immer noch nicht.
Interessant. Wusste ich selbst nicht...
[Return] ist ein Sonderfall bei den Tastenereignissen, denn mit [Return] wird der Focus auf das nächste Control gesetzt (Zumindest bei den Standardeinstellungen, kann man unter "Optionen" ändern). Das sorgt aber dafür, dass das KeyPress-Ereignis für die Textbox niemals ausgelöst wird, weil es bereits von Access verarbeitet wurde.

Wenn du stattdessen das KeyDown-Ereignis verwendest, funktioniert es so wie du es dir vorstellst.
Titel: Re: Andere Prozedur aufrufen verschiebt nur den Fokus
Beitrag von: Eisman333 am Februar 01, 2022, 15:39:48
Zitat von: PhilS am Februar 01, 2022, 15:30:27Wenn du stattdessen das KeyDown-Ereignis verwendest, funktioniert es so wie du es dir vorstellst.

Alles klar, vielen Dank für das prüfen und aufklären, man lernt einfach nie aus.