كيف يمكنني معرفة ما إذا كان مثيل Access 2010 شكل لا يزال مفتوحا ؟

StackOverflow https://stackoverflow.com/questions/8354927

سؤال

مقدمة

أنا بحاجة إلى إنشاء عدة نسخ من نموذج البحث (في Access 2010) بإرجاع قيمة الدعوة (الذي هو أيضا شكل إنشاء مثيل من النموذج).

كما ذكر هذه الأشكال يمكن سوف يكون نسخ متعددة قيد التشغيل في نفس الوقت على سبيل المثال يمكن للمستخدم تريد أن تضيف الشركة إلى شيء حتى أنهم:

  • انقر فوق "اختيار شركة" وفتح مثيل الشركة شاشة البحث
  • ثم فتح شركة المحرر (ترك الشركة الأصلية البحث/شاشة اختيار فتح) كما لاحظت الشركة الشركة الأم التي لم يتم إضافتها بعد
  • ثم انقر فوق "اختيار الشركة الأم" زر فتح مثيل آخر من البحث و اختيار الشاشة
  • وجدوا الشركة الأم
  • حدد الأمر الذي يغلق الثانية شاشة البحث و الشركة الأم وأضاف أن الشركة الأولى.
  • المستخدم ثم اختيار تعديل الشركة باستخدام البحث الأصلي الشاشة مرة أخرى يغلق البحث الأصلي الشاشة ويعود اختيار الشركة إلى شكل ما من أي وقت مضى أنها في الأصل initialised البحث الأول...

كل هذا يسمح للمستخدمين تحديث البيانات الصحيحة عندما تجد خطأ مما يقلل من احتمال منهم النسيان يجعلها أسرع بكثير!

الأكثر من هذا هو بخير الآن ولكن كان لدي الكثير من المشاكل مع حالات من شكل عدم القدرة على فتح مثل "acDialog" وبالتالي وقف استدعاء التعليمات البرمجية قيد التشغيل حتى بحث تم القيام به (انظر هذا السؤال لمزيد من المعلومات) و الحل لقد ذهبت مع لمحاكاة التوقف من استدعاء التعليمات البرمجية باستخدام حلقة لا متناهية والتحقق إذا كان البحث الشاشة الفورية لا تزال مرئية.ثم عندما يختار المستخدم شيء على شاشة البحث الفوري فإنه يضع قيمة في حقل مخفي في شاشة البحث و يخفي انها النفس (غير المغلقة).وظيفة الدعوة ثم يرى انها خفية الاستيلاء على قيمة من حقل مخفي و افرغت الفورية.

المشكلة

أنا يمكن أن تحقق إذا كان النموذج هو مخفي باستخدام FormInstant.واضحة ولكن إذا كان المستخدم يغلق شكل هذا يسبب خطأ ورمز أنا عادة استخدام للتحقق إذا كان النموذج موجود يتطلب اسم النموذج و كما انها لحظة من شكل كل أشكال لها نفس الاسم!لدي إشارة إلى شكل كما يتم تخزينه في المحلية "شكل" الكائن...مدونة أنا عادة استخدام:

CurrentProject.AllForms("FormName").IsLoaded

كيف يمكنني التحقق الفوري من نموذج يتم تحميلها ؟

هل كانت مفيدة؟

المحلول

لول أنا فقط أدركت حين إعادة قراءة msg أستطيع أن المرجح فخ الخطأ أن العمل إذا كان النموذج مفتوحا أو لا!

لدي بسرعة كتابة هذا ويبدو أن تعمل بشكل جيد:

Public Function IsFormLoaded(ByRef FormToTest As Form, _
                            Optional ByRef bIsVisable As Boolean = False) As Boolean
    Dim lErrorNum As Long
    bIsVisable = False
    On Error Resume Next
        bIsVisable = NewFormClone.Visible
        lErrorNum = Err.Number
    On Error GoTo 0

    If (lErrorNum = 0) Then
        IsFormLoaded = True
    Else
        IsFormLoaded = False
    End If
End Function

أعتقد أنه لا ماتر الذي يجيب على السؤال طالما أنه أجاب الرجل القادم/gal يمكن استخدامها! :)

سأترك هذا مفتوح قليلا و إذا لم يجد أفضل إجابة سيتم وضع علامة هذا كما...

نصائح أخرى

أود الإجابة.أما عن الحلقة/الانتظار الفكرة ؟ أفضل طريقة هي أن تشمل دائما مرجعا في كل شكل.أنا useally تعلن وحدة نموذج متغير يسمى frmPrevious.

Create instance of form
Instance.frmPrevious = me

حتى الآن لدينا شكل "نداء" بعض التعليمات البرمجية عندما شكل مغلق في مكان بعض "مرئية" + حلقات كود وضع.

وذلك في وثيقة مدونة شكل لدينا:

frmPrevious.FunctionCodeToRun

سبق يحل العديد من القضايا ، ولكن واحد هو أنك لا تحتاج الحوار (الذي كما يمكنك ملاحظة لا يمكن استخدام) و يمكنك أيضا التخلص من الحاجة إلى كتابة "حلقة + الانتظار" رمز من رمز الدعوة.

هذا لا يعني أن الكود الخاص بك لا يزال في وظيفة جديدة في الدعوة النموذج.ولذلك عادة ما يكون المكان الذي تعمل تحت رمز الدعوة في الدعوة النموذج.أنا أيضا أميل إلى استخدام معيار اسم تلك الوظيفة.أجد هذا مقايضة يستحق ذلك بدلا من حلقة/الانتظار و الاستمرار في نفس رمز الروتينية (أنا أوافق على هذا "تواصل" في التعليمات البرمجية هو الأفضل في كثير من الأحيان, ولكن بعد ذلك مرة أخرى الحاجة إلى كتابة حلقات وانتظر رمز ليس حقا أن نظيف).

مسألة قديمة ولكن هنا ما تجربة علمتني:إذا كان واحد اثنين ...حالات FormDefn فتح ثم يغلق واحد (الماجستير والتي هي الوحيدة التي يمكن أن تكون مصممة), أشكال(FormName) يعطي خطأ, الأشكال(شكل) يعطي وجوه الخطأ ، ولكن أشكال(NumberIndex) لا تزال قائمة مع .Name = FormName!

OpenForm يخلق أشكال(FormName) الكائن.مرة واحدة مغلقة أشكال(FormName) يعطي خطأ.أي "مجموعة xForm = New Form_xxx" يخلق أشكال في مجموعة النماذج التي يمكن الوصول إليها فقط عن طريق جمع عدد مؤشر, و لا يمكن أن يكون تصميم.

لذلك تجد في وقت لاحق متعددة سبيل المثال شكل استخدام شيء من هذا القبيل:

Dim FormIdx     As Integer
Dim lForm       As Access.Form
For FormIdx = 0 To Application.Forms.Count - 1
    Set lForm = AccessFunc.Appl.Forms(FormIdx)
    If lForm.Name = pFormName Then
        IsFormOpened = True
        Set rForm = lForm
        GoTo IsFormOpened_Exit
    End If
Next

جرب هذا أيضا

Function IsLoaded(strFrmName As String) As Boolean

    '  Determines if a form is loaded.

    Const conFormDesign = 0
    Dim intX As Integer

    IsLoaded = False
    For intX = 0 To Forms.Count - 1
        If Forms(intX).FormName = strFrmName Then
            If Forms(intX).CurrentView <> conFormDesign Then
                IsLoaded = True
                Exit Function  ' Quit function once form has been found.
            End If
        End If
    Next

End Function

يمكنك استدعاء الدالة أعلاه في المشروع الخاص بك مثل ذلك

If Not isLoaded("MyForm") Then
 MsgBox "MyForm is Not Loaded"
End If
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top