시간 지연이 있는 텍스트 입력
-
21-12-2019 - |
문제
내 시나리오:여러 입력 필드가 있는 양식을 만들었습니다.텍스트 입력 필드 중 하나에는 "변경" 이벤트를 포착하는 기본 이벤트 리스너가 있습니다.
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
해결책
양식을 사용하세요 Timer
이벤트.세트 TimerInterval
폼 로드 시 0으로 설정됩니다.그런 다음 텍스트 상자 변경 이벤트에서 재설정 TimerInterval
카운트다운 타이머 값으로 변경됩니다.
메모 Me.orderID.Text
텍스트 속성이며 Null이 될 수 없습니다.그러므로 길이가 0보다 큰지 확인하십시오. 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에서 샘플 양식을 사용하여 해당 접근 방식을 테스트한 결과 귀하가 요청한 대로 작동한다고 생각합니다.동일한 양식에 있는 둘 이상의 텍스트 상자에 대해 이와 같은 작업을 수행하려는 경우 이 제안은 적합하지 않습니다.
다른 팁
대신 _AfterUpdate 이벤트를 사용하는 것이 좋습니다. 사용자가 문자를 입력 한 경우 사용자가 Enter 키 또는 Tab 키를 누르면됩니다.그런 식으로 한 번만 발사 할 것입니다.사용자가 무언가를 찾으려고 일시 중지하면 타이머를 빌드하려고 할 수 없습니다.
또는 주문 번호가 항상 동일한 길이 (즉, 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
.