اذهب الي المحتوي
أوفيسنا

الفرق بين الوحدة النمطية و الوحدة النمطية للفئة ؟؟؟؟


الردود الموصى بها

بسم الله الرحمن الرحيم

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

اولا : الكود

يتم وضع الكود في زر امر او عند تحميل نموذج او اغلاقه و يكون الكود خاصا بمعنى ينفذ عند حدث الضغط على زر الامر ( oopen )

مثلا


private sub oopen_click

docmd.openform"11"

end sub

نلاحظ في بداية الكود كلمة ( private ) اي خاص و الكود هنا ينفذ فقط عند الضغط على زر ( oopen ) ثانيا : الوحدات النمطية تحتوي الوحدات النمطية على اكواد او وظائف و على عكس ( الكود ) يمكن استدعاء الوحدة النمطية في اي نموذج وهي لا تتحس بالأحداث مثلا

Public Sub openform()

DoCmd.openform "ff"

End Sub

نلاحظ وجود كلمة ( public ) اي عمومي يقوم هذا الكود بفتح النموذج ( ff ) و يتم استدعائه بهذا الشكل

Private Sub Command0_Click()

Call openform

End Sub

حيث نضع هذا الكود في اي زر موجود ضمن اي نموذج فائدة : لا يجوز تسمية الوحدة النمطية بنفس اسم احد الكودات الموجود داخلها ( مثلا لا يجوز تسمية الوحدة النمطية السابقة باسم openform بل يجب اعطائها اي اسم آخر ) فائدة : لا يمكن ان تكتب في الوحدة النمطية ( oopen_click ) لان الوحدة النمطية لا تتحسس بالأحداث ثالثا : الوحدة النمطية للفئة الوحدة النمطية للفئة تجمع بين الوحدة النمطية و الكود بمعنى آخر الكود التالي ينفذ عند فتح النموذج

private sub form_open

Set Anim = New clsFormAnimate

end sub

و عملية فتح النموذج فعليا هي حدث ولكن لا يمكن ان نكتب الكود السابق ضمن وحدة نمطية حتى لو استعملنا كلمة ( public ) لان الوحدة النمطية لا تتحس بالأحداث ( كما ذكرنا سابقا ) انما تخزن كودا عاما يتم تعريفه باسمه و ضمن اسمه نكتب ما نريد ان ينفذ لكن الوحدة النمطية للفئة يمكن ان تتحس بالأحداث و تتعامل معها مثلا يمكن ان تكتب ضمن الوحدة النمطية للفئة

Private Sub mForm_Load()

MsgBox "hi", vbInformation

End Sub

الكود السابق يعطي رسالة ( hi ) عند تحميل نموذج و لكن اي نموذج !!!! الجواب هو اي نموذج نرغب به فقط علينا استدعاء الوحدة النمطية للفئة لتنفيذ هذا الكود فائدة : الوحدة النمطية للفئة تستدعى باسمها على عكس الوحدات النمطية كيف يتم استدعاء الوحدة النمطية للفئة ؟؟ 1 - ننشئ وحدة نمطية للفئة و نسميها ( open1 ) نكتب الكود التالي في قسم التصريحات العامة للوحدة النمطية للفئة

Public withevents mform As Access.Form

حيث يتم تعريف المتغير ( mform ) كنموذج 2 - نكتب هذا الكود في الوحدة النمطية للفئة

Private Sub Class_Initialize()

mForm_Load

Beep

End Sub

عند تحميل الوحدة النمطية اذهب الى ( mform_load ) 3 - نضيف هذا الكود الى الوحدة النمطية للفئة

Private Sub mForm_Load()

MsgBox "hi", vbInformation

End Sub

عند تحميل ( mform ) اظهر رسالة ( hi ) و طبعا ( mform ) تم تعريفه سابقا كنموذج اكسس 4 - نكتب هذا الكود في قسم التصريحات العامة للنموذج الذي نرغب ان يتم استدعاء الوحدة النمطية للفئة فيه و ليكن مثلا ( 123 )

Dim Anim As open1

تم تعريف متغير ( anim ) كوحدة نمطية للفئة 5 - نكتب هذا الكود في حدث تحميل النموذج ( 123 )

Set Anim = New open1

تم ضبط المتغير ليستدعي الوحدة النمطية للفئة فائدة : لايمكن كتابة الكود التالي لاستدعاء الوحدة النمطية للفئة

Private Sub Form_Load()

Call open1

End Sub

الكود المكتوب ضمن الوحدة النمطية للفئة السابقة يقوم باصدار صوت تنبيه و يظهر رسالة مكتوب فيها ( hi )

الكثير يسأل هل يجب ان اكتب كل هذه الجريدة من اجل صوت تنبيه و رسالة ترحيب

الجواب هو لا ولكن يتم انشاء الوحدات النمطية للفئة من اجل عدد نماذج اكبر و عمليات كودات اكبر

و في النهاية ربما يستطيع المرفق ان يشرح افضل مني

وارجو ممن يستطيع ان يشرح افضل مني ان يسهم في شرح الموضوع

و اعتذر على الإطالة

مثال عن انشاء الوحدات النمطية و الوحدات النمطية للفئة.rar

  • Like 3
رابط هذا التعليق
شارك

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information