مرحباً بكم يا سادة يا كرام .. وسلامٌ من الله عليكم ورحمة منه وبركة
سيداتي آنساتي سادتي ..
سأضع في هذا الشرح كل ما أعرفه عن الإشارة إلى النماذج الفرعية ذات مستوى واحد أو مستويات متعددة ، من خلال النماذج الرئيسية ، وكذلك العكس من النماذج الفرعية إلى نماذج الآباء الرئيسية ..
مثال توضيحي نظري ..
لدينا ..
نموذجMain = رئيسي
نموذج1 = فرعي1 .. يعني أن هذا النموذج وضع داخل النموذجMain
نموذج2 = فرعي2 .. يعني أن هذا النموذج وضع داخل النموذج1
نموذج3 = فرعي3.. يعني أن هذا النموذج وضع داخل النموذج2
لاحظ أنها نماذج ساكنة في بطون بعضها البعض ، فعند عرضك للنموذجMain سترى بداخله نموذج1 ، وبداخل النموذج1 سترى النموذج2 ، وبداخل النموذج2 سترى النموذج3 ، كلها في شاشة واحدة ..
سوف أتطرق إلى النقاط التالية من خلال هذا المثال ..
* الوصول إلى نموذج3 من خلال النموذج Main ، معنى هذا أنني لابد أن أمر بالنموذج1 ثم 2 بالترتيب
* الرجوع العكسي والوصول إلى النموذجMain من خلال النموذج3 ، ومعنى هذا أنني لابد أن أمر على النموذج2 ثم 1 بالترتيب
* الوصول إلى خصائص النماذج وتغييرها
* فلترة النماذج
أولاً .. أحبتي الكرام
يجب محاولة فهم هذه المعاملات الثلاث ..
* النقطة (0)
وتستخدم لتحديد خواص (مربع نص ، عنوان ، زر أمر خاصية في نموذج ... الخ) سنضرب أمثلة متنوعة عليها إن شاء الله تعالى
* الاستفهام (!)
ويستخدم لتحديد (النموذج ، مربع النص ، عنوان ، زر أمر ... الخ) انتبه فهو لتحديد العنصر لا خصائصه ، سنضرب أمثلة متنوعة عليها إن شاء الله تعالى
* النقطة مع كلمة فورم (form.)
وتستخدم للانتقال إلى خصائص النماذج الفرعية
* علامة يساوي (=)
وتستخدم لإسناد قيمة خاصية ، كملء مربع نص ، عنوان .. كما تستخدم لتحديد قيمة خاصية منطقية True & False
ملاحظات
* يُعامل النموذج الفرعي معاملة الخصائص للنموذج الرئيسي ، فيُشار إليه كابن له ، لذا فيشار إليه بالنقطة .
* يُشار إلى النموذج الرئيسي كأب من خلال النموذج الفرعي ، بالعبارة Parent
* يُختصر الإشارة إلى النموذج الذي ننفذ الأمر من خلاله بالكلمة Me بدلاً من كتابة كلمة Forms
بالطبع .. غالباً ما نستخدم جميع هذه المعاملات في سطر واحد ، أي في عبارة واحدة .
تطبيقات ..
** النموذج الرئيسي .. frmMain
* الإشارة إلى خصائص النموذج الرئيسي .. من داخله ، لا من داخل أحد النماذج الفرعية .. سنتخدم العبارة Me
Me.AllowAdditions = True Me.AllowDeletions = False Me.AllowEdits = False Me.DataEntry = True Me.Caption="النموذج الرئيسي "
في الأسطر الخمسة.. حددنا النموذج الذي نريد الوصول إلى خصائصه وعناصره بالكلمة Me ، ثم حددنا الخاصية بالمعامل النقطة ، ثم أسندنا القيمة بالمعامل =
في المثال السابق .. أتحنا الإضافة ، وإدخال البيانات بالقيمة True ومنعنا الحذف والتحرير بالقيمة False ، وحددنا عنوان النموذج .
* الإشارة إلى عنصر تحكم في النموذج رئيسي .. من داخله ، لا من داخل أحد النماذج الفرعية ..
Me.Lable1.Caption = "بسم الله الرحمن الرحيم" Me.TextBox1.Enabled=False Me.command1.Visible= False
في الأسطر الثلاثة ، حددنا النموذج الذي نريد الوصول إلى خصائصه وعناصره بالكلمة Me ، ثم حددنا عنصر التحكم بالمعامل النقطة ، ثم أسندنا القيمة بالمعامل =
في المثال السابق .. حددنا عنوان عنصر تحكم العنوان ، ومنعنا الوصول إلى مربع النص ، وأخفينا زر الأمر عن الأنظار ..
ملاحظة .. بالطبع أنت لا تقوم بتنفيذ هذه الأوامر إلا من خلال شروط ، إذا حصل كذا فافعل كذا .. وهكذا ..
** النموذج الفرعي الأول .. frm1
هذا النموذج يوجد داخل النموذج الرئيسي .. وبهذا يكون لدينا نموذجان فقط
* الإشارة إلى خصائصه من خلال النموذج الرئيسي ..
Me.frm1.Form.DataEntry = True Me.frm1.Form.Visible=False Me.frm1.Form.Filter = "field1=" & Me.txt1 Forms!frm1.Form.FilterOn = True
field1 = حقل في النموذج الفرعي1
txt1 = حقل في النموذج الرئيسي
فقمنا بفلترة وتصفية سجلات النموذج الفرعي1 بالقيمة الموجودة في حقل النموذج الرئيسي
ملاحظة .. تستطيع حذف Form. ليكون هكذا ..
Me.frm1.DataEntry = True Me.frm1.Visible=False
* إلإشارة إلى خصائص عناصر تحكم النموذج الفرعي من خلال النموذج الرئيسي ..
Me.frm1.Form!TextBox2.Text= "الفريق العربي للبرمجة" Me.TextBox1=Me.frm1.Form!TextBox2
في السطر الأول ملأنا مربع النص2 في النموذج الفرعي بالقيمة "الفريق العربي للبرمجة" ، وفي السطر الثاني ملأنا مربع النص في النموذج الرئيسي بمحتويات مربع النص الفرعي
** النموذج الفرعي الثاني .. frm2
هذا النموذج يوجد داخل النموذج الفرعي الأول .. وبهذا يكون لدينا ثلاثة نماذج فقط
* الإشارة إلى خصائصه من خلال النموذج الرئيسي .. انتبه سنمر مروراً إجبارياً بالنموذج الفرعي1
Me.frm1.Form!frm2.Form.Visible = False
وتستطيع حذف Form. بين أسماء النماذج .. ليكون هكذا ..
Me.frm1!frm2.Form.Visible = False
لكنك لا تستطيع حذف كلمة Form المباشرة والملتصقة بخصائص النموذج مباشرة ، أقصد
Form.Visible = False
* إلإشارة إلى خصائص عناصر تحكم النموذج الفرعي الثاني من خلال النموذج الرئيسي ..
MsgBox Me.frm1.Form!frm2.Form!txtbox3
** النموذج الفرعي الثالث .. frm3
هذا النموذج يوجد داخل النموذج الفرعي الثاني .. وبهذا يكون لدينا أربعة نماذج فقط
* الإشارة إلى خصائصه من خلال النموذج الرئيسي .. انتبه سنمر مروراً إجبارياً بالنموذج الفرعي1 ثم النموذج الفرعي2
Me.frm1.Form!frm2.Form!frm3.Visible = False
* إلإشارة إلى خصائص عناصر تحكم النموذج الفرعي الثاني من خلال النموذج الرئيسي ..
MsgBox Me.frm1.Form!frm2.Form!frm3!txtbox4
** عكس المسار ، والإشارة إلى النموذج الرئيسي من خلال النماذج الفرعية .
* النموذج الفرعي1 .. frm1
الإشارة إلى خاصية العنوان للنموذج الرئيسي ..
Me.Parent.Form.Caption = "شاشة الفريق العربي للبرمجة"
الإشارة إلى قيمة مربع النص في النموذج الرئيسي ..
MsgBox Me.Parent.Form!txtBox1
* النموذج الفرعي2 .. frm2
الإشارة إلى خاصية العنوان للنموذج الرئيسي ..
Me.Parent.Form.Parent.Form.Caption = "شاشة الفريق العربي للبرمجة"
الإشارة إلى قيمة مربع النص في النموذج الرئيسي ..
Me.Parent.Form.Parent.Form!txtBox1 = "Ok"
* النموذج الفرعي3 .. frm3
تماماً مثل النموذج الفرعي2 إلا أنك تكرر .Form.Parent. بعدد النماذج الفرعية التي تمر بها
نماذج فرعية في نماذج رئيسية أخرى ..
** الإشارة إلى نموذج فرعي في نموذج رئيسي خارجي وليس الذي الذي عليه التركيز ، لكن ذلك النموذج مفتوح
سنستخدم الكلمة الأساسية Forms للإشارة إلى مجموعة النماذج ، مما يعني أننا لا نستطيع استخدام الكلمة Me
* إخفاء النموذج الفرعي الأول ، وبالتالي تختفي النماذج التي بداخله ..
Forms!frmMain2.Form!frm1.Form.Visible = False
* إخفاء النموذج الفرعي الثاني ، وبالتالي تختفي النماذج التي بداخله ..
Forms!frmMain2.Form!frm1.Form!frm2.Form.Visible = False
* إخفاء النموذج الفرعي الثالث فقط ..
Forms!frmMain2.Form!frm1.Form!frm2.Form!frm3.Form.Visible = False
قل مثل ذلك في الوصول إلى عناصر التحكم ، كما مر معك ..
* الإشارة إلى النماذج الفرعية في الشاشة1 ، من خلال النماذج الفرعية في الشاشة2 ..
مثلاً .. الإشارة إلى النموذج الفرعي3 في الشاشة1 ، من خلال النموذج الفرعي3 في الشاشة2
هنا ، نفعل تماماً كما فعلنا مع النموذج الرئيسي ، كما مر ، ولا فرق في ذلك .. هذا يعني أنه لا يلزم أن نمر على نماذج الآباء كما فعلنا سابقاً مع النموذج الرئيسي ونماذجه الفرعية ..
وفقكم الله جميعاً .. وكل عام وأنتم بخير
وأي سؤال .. أنا حاضر ، ومنكم نستفيد