الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

النماذج المنبثقة وأوامر القائمة

مغلق
بدأه محمد طاهر في 20 أكتوبر 2002 · 0 رد · 485 مشاهدة · في مراجعة المواضيع
مشاركة: واتساب X فيسبوك تيليجرام
#1

موضوع منقول من المنتدي القديم

الكاتب : ابو حمود

النماذج المنبثقة وأوامر القائمة

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

الى الآن والأمور تسير على مايرام

ولكن لما أنشأت شريط قوائم للقاعدة ووضعت عليه بعض أوامر فتح للنماذج اصبحت النماذج تظهر فوق بعضها البعض بشكل مزعج .

وقد عملت حل

ولكن اريد من يعرف طريقة للحل أن يذكرها ثم سأذكر الطريقة التي عملتها

--------------------------------------------------------------------------------

الكاتب: ابوحمود بتاريخ: 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

--------------------------------------------------------------------------------

شكر وتقدير

ما شاء الله أساتذة المنتدى يطرحون المشاكل والحلول لها في نفس الوقت

فكيف لي ومن بمستواي ودوني أن يفيدكم بشىء ، ما علينا إلأ نقرأ إبداعاتكم ونحاول تطبيق ما يمكننا فهمه وتطبيقه.

فبارك الله فيكم وزادكم علماًوجعل جزائكم الجنة العليا.

--------------------------------------------------------------------------------

مع خالص تحياتي

ابن مسقط

assq@gawab.com

الكاتب: ابن مسقط بتاريخ: 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

يغلق جميع النماذج ماعدا النموذج الذي يتم تنفيذ الكود منه ولايحتاج أي مراجع .

الأخ مصلح

ليتك تشرح الطريقة لنستفيد منها .

وفق الله الجميع

--------------------------------------------------------------------------------

الكاتب: ابوحمود بتاريخ:

هذا الموضوع مغلق.

مواضيع مشابهة