كيف يمكنني معرفة ما إذا كان مثيل Access 2010 شكل لا يزال مفتوحا ؟
-
27-10-2019 - |
سؤال
مقدمة
أنا بحاجة إلى إنشاء عدة نسخ من نموذج البحث (في 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