Frage

Mein Szenario:Ich habe ein Formular mit mehreren Eingabefeldern erstellt.Einem der Texteingabefelder liegt ein Ereignis-Listener zugrunde, der das Ereignis „Änderung“ auffängt.

Private Sub orderID_Change()
    If Not IsNull(Me.orderID.Text) Then
        Set Me.orders.Recordset = ordermanager.getOrder(Me.orderID.Text)
    End If
End Sub

Wenn der Benutzer eine bestimmte Bestellnummer eingibt, wird der Rückruf für jeden Buchstaben/jedes Zeichen ausgeführt, das der Benutzer bereits in das Textfeld eingegeben hat.

Meine Frage: Gibt es in msaccess eine mögliche Lösung, um eine Zeitverzögerung für eine bestimmte Eingabemaske zu erstellen?

Zum Beispiel: Ein Benutzer gibt eine Bestellnummer mit einigen Ziffern ein.Wenn das erste Änderungsereignis ausgelöst wird, beginnt eine interne Timerfunktion, einen Zähler zu dekrementieren.Solange nun weitere Interaktionen mit dem Benutzer stattfinden, läuft der Timer ab und ruft die zugrunde liegende Funktion auf.Wenn zwischenzeitlich weitere Eingaben durch den Benutzer vorgenommen wurden, sollte der Zähler zurückgesetzt werden.

Zum Beispiel:Benutzer gibt „123“ ein

SYSTEM     : waiting for input
USER INPUT : 1
SYSTEM     : timer 100ms
SYSTEM     : timer 80ms
SYSTEM     : timer 60ms
SYSTEM     : timer 40ms
USER INPUT : 2
SYSTEM     : timer 100ms
SYSTEM     : timer 80ms
USER INPUT : 3
SYSTEM     : timer 100ms
SYSTEM     : timer 80ms
SYSTEM     : timer 60ms
SYSTEM     : timer 40ms
SYSTEM     : timer 20ms
SYSTEM     : timer 0ms
SYSTEM     : Run Routine
War es hilfreich?

Lösung

Nutzen Sie das Formular Timer Ereignis.Satz TimerInterval auf Null bei Formlast.Geben Sie dann im Textfeld „Ereignis ändern“ die Option „Zurücksetzen“ ein TimerInterval zu Ihrem Countdown-Timer-Wert.

Notiz Me.orderID.Text ist eine Texteigenschaft und wird niemals Null sein.Prüfen Sie daher, ob seine Länge größer als Null ist orderID_Change.

Private Sub Form_Load()
    Me.TimerInterval = 0
End Sub

Private Sub Form_Timer()
    MsgBox "Run routine now"
    Me.TimerInterval = 0
End Sub

Private Sub orderID_Change()
    'If Not IsNull(Me.orderID.Text) Then
    If Len(Me.orderID.Text) > 0 Then
        Me.TimerInterval = 1000 ' milliseconds
    Else
        Me.TimerInterval = 0
    End If
End Sub

Ich habe diesen Ansatz mit einem Beispielformular in Access 2007 getestet und denke, dass er Ihren Anforderungen entspricht.Wenn Sie so etwas für mehr als ein Textfeld im selben Formular tun möchten, reicht dieser Vorschlag nicht aus.

Andere Tipps

Ich würde vorschlagen, dass Sie stattdessen das Ereignis _Afterupdate-Ereignis verwenden - und den Benutzer nur die ENTER-Taste drücken, oder die TABE-Taste, wenn Sie mit den Zeichen eingeben.Auf diese Weise wird es nur einmal feuern.Der Versuch, einen Timer zu erstellen, funktioniert möglicherweise nicht, wenn der Benutzer anhebt, um nach etwas zu suchen.

oder wenn die Bestellnummer immer die gleiche Länge (d. H. 6) ist, könnten Sie Folgendes tun:

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top