موضوع منقول من المنتدي القديم
الكاتب : ابو حمود
النماذج المنبثقة وأوامر القائمة
أنشأت قاعدة فيها عدد من النماذج المنبثقة ووضعت نموذج كقائمة رئيسة للقاعدة وفيه أزرار لفتح النماذج وفي آخر أمر كل زر وضعت أمر لإخفاء نموذج القائمة الرئيس وعند إغلاق أي نموذج يقوم في حدث عند الإغلاق بإظهار نموذج القائمة الرئيسة وذلك من أجل عدم ظهور أكثر من نموذج في وقت واحد .
الى الآن والأمور تسير على مايرام
ولكن لما أنشأت شريط قوائم للقاعدة ووضعت عليه بعض أوامر فتح للنماذج اصبحت النماذج تظهر فوق بعضها البعض بشكل مزعج .
وقد عملت حل
ولكن اريد من يعرف طريقة للحل أن يذكرها ثم سأذكر الطريقة التي عملتها
--------------------------------------------------------------------------------
الكاتب: ابوحمود بتاريخ: 9/29/2002 9:07:23 AM
--------------------------------------------------------------------------------
احد الحلول
ما خطر ببالي هو أحد حلان
1- استخدام مركب للدالة Isloaded
2- تعريف بعض المتغيرات الهامة و تغيير قيمتها عند فتح فورم و بالتالي التعامل من خلال هذه القيم عند الفتح و الاغلاق و يمكن استبدال المتغيرات العامة بقيم فى جدول لتوفير الذاكرة
--------------------------------------------------------------------------------
الكاتب: محمد طاهر بتاريخ: 9/29/2002 2:39:41 PM
--------------------------------------------------------------------------------
لم يشارك سوى مشارك واحد
اعتقدت أنه ستكون هناك حلول ومشاركاتك
عموما
الأخ محمد
شكرا على مشاركتك
ليتك تشرح الطريقتين التين ذكرتهما بالتفصيل
أما الحل الذي توصلت إليه ففي حدث عند الفتح للنموذج وضعت :
Call النماذج_المفتوحة(False, Me.Name)
وفي الوحدة النمطية العامة كتبت :
Public Function النماذج_المفتوحة(frmView As Boolean, DoOpen As String)
Dim i As Integer
If Forms().Count = 0 Then Exit Function
' لإخفاء أو إظهار أي نموذج
If DoOpen = "لا" Then
For i = i To Forms().Count - 1
Forms(i).Visible = frmView
Next i
Else ' لإخفاء كل النماذج المفتوحة ماعدا الممر اسمه
For i = i To Forms().Count - 1
If Forms(i).Name <> DoOpen Then Forms(i).Visible = frmView
Next i
End If
End Functionفما رأيك في الطريقة ؟
ولك تحياتي
--------------------------------------------------------------------------------
الكاتب: ابوحمود بتاريخ: 9/29/2002 9:51:52 PM
--------------------------------------------------------------------------------
هذا هو
بالنسبة لحلك ، هو جميل جدا ، و منكم تستفيد
فقط أفضل Close بدل hide حتي لا تكثر الفورم المقتوحة فى الخلفية الا اذا كنت تريد ذلك
لكي لا تبقي الالفورم مفتوحة الا اذا كنت تريدها كذلك
و الحل الثاني لدي شبيه به:
Dim dbslocal As Database
Dim cntlocal As container
Dim docLocal As Document
Set dbslocal = CurrentDb
Set cntlocal = dbslocal.containers!Forms
For Each docLocal In cntlocal.Documents
Debug.Print docLocal.Name
If IsLoaded(docLocal.Name) Then DoCmd.Close acForm, docLocal.Name, acSaveYes MsgBox docLocal.Name
Next docLocal
---------------
Function IsLoaded(ByVal strFormName As String) As Integer
Returns True if the specified form is open in Form view or Datasheet view.
Const conObjStateClosed = 0
Const conDesignView = 0
If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then
If Forms(strFormName).CurrentView <> conDesignView Then
IsLoaded = True
End If
End If
End Functionو هو يحتاج مرجع DAO
و بالطبع ممكن استثناء أي فورم من الدورة
--------------------------
و الحل الاول هو تعريف مجموعة من المتغيرات أو قيم فى جداول أقوم بتغيرها الي True & False
عند فتح أي فورم و بالتالي أعرف هل هي مفتوحة أم لا و بنفس الطريقة من قيمة المتغير
أي اذا كان المتغير أو القيمة فى الجدول المناظرة للفورم الاول = True فأعرف أنها مفتروحة فأغلقها أو أتركها بحسب الحاجة ، و هذا قد يكون سهل فى حالة الاحتمالات ، أي اذا كان هناك حالة خاصة عندما تكون فورم 1 و 3 مفتوحين أغلق فورم 1 فقط مثلا
فيكون هذا الحل أسهل و ان كان أقل احترافا
الكاتب: محمد طاهر بتاريخ: 9/30/2002 3:36:43 AM
--------------------------------------------------------------------------------
طريقة لم أجربها ولكن أعتقد أنها تعمل
ياشباب
هل جربتم الماكرو أنا لم أجرب الطريقة ولكن أعتقد بأنها تعمل 0
مثلاً : في ماكروا نختار فتح نموذج والأوامر الأخرى هي أخفاء بيقة النماذج أو إغلاقها ثم نضيفه للقائمة يعني ماكرو الشروط 0أضن الطريقة تعمل وسوف أجربها 0
--------------------------------------------------------------------------------
الكاتب: مصلح الحريصي بتاريخ: 9/30/2002 7:29:21 AM
--------------------------------------------------------------------------------
شكر وتقدير
ما شاء الله أساتذة المنتدى يطرحون المشاكل والحلول لها في نفس الوقت
فكيف لي ومن بمستواي ودوني أن يفيدكم بشىء ، ما علينا إلأ نقرأ إبداعاتكم ونحاول تطبيق ما يمكننا فهمه وتطبيقه.
فبارك الله فيكم وزادكم علماًوجعل جزائكم الجنة العليا.
--------------------------------------------------------------------------------
مع خالص تحياتي
ابن مسقط
الكاتب: ابن مسقط بتاريخ: 9/30/2002 8:47:29 AM
--------------------------------------------------------------------------------
شكرا لكل من شارك بالرد .
وللتوضيح الدالة التي كتبتها فيها حالتين :
الأولى : إذا لم يمرر اسم النموذج وإنما يمرر كلمة لا
والغرض من ذلك إخفاء كل النماذج المفتوحة وغالباً ما يعقب ذلك فتح نموذج محدد وهذا القسم استخدمه لفتح أي نموذج باستخدام القائمة .
وإذا سأل أحد ولماذا لايتم اختيار اسم النموذج باستخدام مربع الحوار تخصيص ثم وضعه في القائمة فأقول بسبب أنه لايعطيك تحكم كامل مثلا اريده أن يفتح لي النموذج على سجل جديد عندما افتحه من القائمة فهل لذلك حل آخر ؟
الثانية : أن يمرر اسم النموذج وهذا استخدمه في حدث عند الفتح لنموذج مفتوح بواسطة نقر زر أمر من نموذج الأول وللتوضيح اكثر لدينا نموذج1 فيها زر عند نقره يفتح نموذج2 وانا وضعت في حدث عند الفتح لنموذج2 أمر إخفاء كل النماذج المفتوحة ماعدا الحالي وهو هنا نموذج2 .
الأخ محمد
استخدمت طريقة الإخفاء بدلا من الإغلاق لأنني لا اعرف عدد النماذج التي قد فتحها المستخدمه والبرنامج في أوله يعني قد أضيف نماذج أخرى فبدلا من أن أكرر الأسماء لكل نموذج وضعت الدالة السابقة ، وأيضا منالفوائد أنه قد يفتح نموذج لتسجيل بيانات ولكنه لم يكمل تسجيلها ثم ضغط زر لفتح نموذج آخر للتأكد من شيء ما مثلا فإغلاق النموذج في هذه الحالة غير مفيد .
الطريقة التي استخدمتها جيدة ولكن هذا الكود اخصر منها :
Dim I As Byte If Forms().Count <> 0 Then For I = I To Forms().Count - 1 If Forms(I).Name <> Me.Name Then _ DoCmd.Close acForm, Forms(I).Name Next I
يغلق جميع النماذج ماعدا النموذج الذي يتم تنفيذ الكود منه ولايحتاج أي مراجع .
الأخ مصلح
ليتك تشرح الطريقة لنستفيد منها .
وفق الله الجميع
--------------------------------------------------------------------------------
الكاتب: ابوحمود بتاريخ:
