我的场景: 我已建立具有多个输入字段的表单。其中一个文本输入字段具有底层事件侦听器,它捕获“更改”事件。

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

当用户类型以特定顺序编号时,每个字母/符号的回调运行用户已键入文本字段。

我的问题:在msaccess中有可能解决方案,为特定输入掩码创建时间延迟?

例如:用户用一些数字键入订单号。触发第一个更改事件时,内部定时器功能开始递减计数器。只要现在与用户发生额外的互动,计时器就会运行时间并调用底层函数。 如果与此同时,用户的额外输入已经制作,应重置计数器。

例如:“123”

中的用户类型
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
.

有帮助吗?

解决方案

使用form Timer事件。将TimerInterval设置为ZERO,以表单负载。然后,在文本框中更改事件中,将生成的TimerInterval重置为计数计时器值。

note Me.orderID.Text是文本属性,永远不会为null。因此,在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
.

我测试了在Access 2007中的样本形式的方法,我认为它确实如你所要求的。如果您想要在同一形式上为多个文本框这样做的事情,则此建议不会削减它。

其他提示

我建议您使用_AFterpdate事件 - 只需在完成输入字符时按“输入键”或“标签”键。这样它只会开火一次。如果用户暂停寻找某些东西,则尝试构建计时器可能无法正常工作。

或者如果顺序#始终相同(即6),则可以执行以下操作:

Private Sub orderID_Change()
    If Len(Me.orderID.Text) < 6 Then
        'Debug.Print "len=" & Len(Me.orderID.Text)
        Exit Sub
    Else
        'Debug.Print "Ready to set RS!!"
        Set Me.orders.Recordset = ordermanager.getOrder(Me.orderID.Text)
    End If
End Sub
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top