Neuigkeiten:

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

Mobiles Hauptmenü

Text in Textbox verschwindet aber Filter bleibt erhalten

Begonnen von KonradR, September 24, 2024, 13:24:29

⏪ vorheriges - nächstes ⏩

KonradR

Hallo liebe Accessfreunde,

ich habe ein Textfeld auf einem Formular platziert, dass in seinem Unterformularsteuerlement ein Endlosformular beinhaltet. Wenn ich in das Textfeld Zeichen eingeben, wird der Inhalt des Unterformularsteuerlements gefiltert. Wenn ich jetzt die ESC-Taste drücke, verschwindet der Text im Textfeld, aber der Filter bleibt gesetzt. Wie kann ich auf dieses Ereigniss reagieren bzw. was passiert hier genau, denn mit If Me.txtSuchen.Text = "" THEN
msgbox "Der Text ist weg."
End IF
passiert genau nichts, wenn ich die ESC-Taste drücke. Habt ihr da eine Idee?

Knobbi38

Mit {ESC} wird ein Undo-Ereignis ausgelöst. Das könntest du dazu verwenden, den Filter wieder zu löschen.

KonradR

Hallo    knobbi38,
Zitat von: knobbi38 am September 24, 2024, 13:45:46Mit {ESC} wird ein Undo-Ereignis ausgelöst.
Hier mein erster Test:
Private Sub txtSuchen_Undo(Cancel As Integer)
    MsgBox "nüscht drin"
End Sub
Die Meldung von der MSG-Box erscheint nicht, wenn ich auf ESC drücke und der Text im besagten Textfeld verschwindet. Ist es vielleicht doch ein anderes Ereignis?

andyfau

Private Sub DeinTextfeld_KeyPress(KeyAscii As Integer)
 Dim Taste As Integer
   Taste = KeyAscii
   If Taste = 27 Then
     MsgBox ("ESC gedrückt")
   End If
End Sub

Eventuell so?

Beste Grüße
Andreas
Beste Grüße
Andreas

MzKlMu

Hallo,
ein leeres Feld hat im Regelfall keinen Leerstring ("") sondern ist Null (=Nix).
Du musst daher auf Null prüfen.

If IsNull(Me.txtSuchen.Text) Then
Außerdem muss ein Filter aktiv gelöscht werden.

Me.Filter = ""
Me.FilterOn = False
Gruß Klaus

Knobbi38

Hallo Konrad,

sorry, aber ich hatte nicht mehr daran gedacht, daß die Textbox ungebunden ist und somit kein UNDO Ereignis ausgelöst wird.

Bleibt nur, das Form_KeyDown Ereignis auszuwerten, wobei die KeyPreview (Tastenvorschau) Eigenschaft des Formulars auf True gesetzt werden muß. Das von Andreas vorgeschlagene Textbox_KeyPress Ereignis hat den Nachteil, das es nicht ausgelöst wird, wenn bei einem Commandbutton des Formulars die Cancel Eigenschaft auf True eingestellt ist.

Im Formular:
Private Const KEY_MASK As Integer = acAltMask Or acCtrlMask Or acShiftMask

Private Sub Form_Open(Cancel As Integer)
  Me.KeyPreview = True
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  On Error Resume Next
 
  ' {ESC} Taste alleine ohne Shift, Ctrl, Alt gedrückt ?
  If KeyCode = vbKeyEscape And (Shift And KEY_MASK) = 0 Then
   
    '  Aktive Steuerelement ist die Suchbox?
    If Screen.ActiveControl Is Me.txtSuchen Then
      Debug.Print "Form_KeyDown(): txtSuchen -> ESC pressed!"
           
      ' *** TODO ***
      '   >>>  Filter löschen
    End If
  End If
 
  On Error GoTo 0
End Sub

KonradR

Hallo andyfau,

Zitat von: andyfau am September 24, 2024, 15:14:23Eventuell so?
Private Sub txtSuchen_KeyPress(KeyAscii As Integer)
Dim Taste As Integer
Dim SQL As String
    Taste = KeyAscii
    If Taste = 27 Then
'        MsgBox ("ESC gedrückt")

        SQL = "SELECT * FROM qryVorgangFirmaAnsprechpartner" 'WHERE qryVorgangFirmaAnsprechpartner.VorgaInhalt LIKE """ & "*" & strSuchtext & "*" & """"
       
        Debug.Print "KeyPress: " & SQL
       
        Forms("frm010Kommunikation").Controls("sfrmVorgang").Form.RecordSource = SQL
        'Forms("frm010Kommunikation").Controls("sfrmVorgang").Requery
       
    End If
End Sub
Läuft wie geschmiert. Vielen Dank für den Tip.

KonradR

Hallo MzKlMu,

Zitat von: MzKlMu am September 24, 2024, 16:02:38ein leeres Feld hat im Regelfall keinen Leerstring ("") sondern ist Null (=Nix).
Du musst daher auf Null prüfen.

Code [Auswählen] Erweitern

If IsNull(Me.txtSuchen.Text) Then
Außerdem muss ein Filter aktiv gelöscht werden.

Code [Auswählen] Erweitern
Me.Filter = ""
Me.FilterOn = False
Danke dafür. Leider passiert bei beiden Varianten nichts.

KonradR

Hallo knobbi38,

Zitat von: knobbi38 am September 24, 2024, 23:39:53sorry, aber ich hatte nicht mehr daran gedacht, daß die Textbox ungebunden ist und somit kein UNDO Ereignis ausgelöst wird.
Das habe ich auch gemerkt, danke.

Zitat von: knobbi38 am September 24, 2024, 23:39:53KeyPreview (Tastenvorschau) Eigenschaft des Formulars auf True gesetzt werden muß.
Alles klar. Aber was passiert Wichtiges bei der KeyPreview?

Auf jeden Fall funktioniert es vielen Dank für deine Inspiration.

Knobbi38

Form.KeyView Property

Aber so etwas kann man doch auch selbst nachschlagen, oder?

Grüße
Knobbi38

KonradR

Zitat von: knobbi38 am September 25, 2024, 12:45:12Form.KeyView Property
Vielen Dank.

Zitat von: knobbi38 am September 25, 2024, 12:45:12Aber so etwas kann man doch auch selbst nachschlagen, oder?
Stimmt. Das hätte ich selbst nachschlagen können. Aber auf die Idee bin ich in unserem Austausch nicht gekommen. Beim nächsten Mal schaue ich erst mal nach, bevor ich die Frage stelle.


KonradR

Zitat von: knobbi38 am September 24, 2024, 23:39:53Commandbutton des Formulars die Cancel Eigenschaft auf True eingestellt ist

Weil dann die definierte Schaltfläche "Commandbutton" die "Abbrechen" Schaltfläche ist und unter anderem mit der Taste "ESC" betätigt wird. Wieder was gelernt. Danke dafür.