题
我的场景: 我已建立具有多个输入字段的表单。其中一个文本输入字段具有底层事件侦听器,它捕获“更改”事件。
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
. 不隶属于 StackOverflow