سؤال

السيناريو الخاص بي:لقد قمت بإنشاء نموذج يحتوي على حقول إدخال متعددة.يحتوي أحد حقول إدخال النص على مستمع للحدث الأساسي، والذي يلتقط حدث "التغيير".

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 إلى الصفر عند تحميل النموذج.ثم، في حدث تغيير مربع النص، قم بإعادة التعيين TimerInterval إلى قيمة مؤقت العد التنازلي.

ملحوظة Me.orderID.Text هي خاصية نصية ولن تكون فارغة أبدًا.لذلك تحقق مما إذا كان طوله أكبر من الصفر 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، أو مفتاح علامة التبويب عند الانتهاء من الدخول إلى الأحرف.وبهذه الطريقة لن تطلق النار مرة واحدة فقط.قد لا تعمل محاولة بناء جهاز توقيت إما إذا توقف المستخدم عن البحث عن شيء ما.

أو إذا كان الأمر # دائما هو نفس الطول (I.E. 6)، فيمكنك القيام به:

giveacodicetagpre.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top