عرض مشاركة واحدة
  #73 (permalink)  
قديم 23-11-2008, 12:32 PM
الصورة الرمزية طهر الأرض
طهر الأرض طهر الأرض غير متصل
عضو مميز
 
تاريخ التسجيل: May 2008
المشاركات: 835
معدل تقييم المستوى: 35
طهر الأرض يستحق التميز

برنامج:
كود PHP:
Sub WriteInText(ByVal Text**** As Control)
Text****.BackColor = System.Drawing.Color.Cyan
Text****.Text = "بسم الله الرحمن الرحيم"
End Sub
لاحظأننا استخدمنا الكلمة ByVal ..
وكان من الممكن أن نستخدم الكلمة ByRef، وسيأتيالفرق بينها وبين زميلتها لاحقاً.

ولاحظ أننا استخدمنا لاسم القيمة الكلمة Text**** ..
ويمكننا تغيير هذا الاسم لأي اسم نريده إطلاقاً.

ولاحظأيضاً أننا استخدمنا النوع Control ..
وذلك لأن نوع القيمة الممررة إلى الإجراءهي أداة أي Control.

بعد ذلك يمكننا استخدام هذا الإجراء من أي مكان،وتنفيذه على أي مربع نص عن طريق استدعاء (كتابة اسم) الإجراء وهو WriteInText ثمكتابة اسم مربع النص الذي نريد التطبيق عليه، وفي حالتنا هذه سنجعله TextBox1 معإمكانية التغيير حسب اسم مربع النص ..


برنامج:
كود PHP:
WriteInText(TextBox1)



الآنلديك مهلة دقيقتين فقط للتفكير في طريقة تجعلنا نحدد اسم مربع النص وكذلك النص الذيسيُكتب بداخله ..

هل عرفت الحل ؟

أعتقد أن الأمر ليس صعباً، فكماأننا قمنا بتمرير اسم مربع النص في المثال السابق، فيمكننا أيضاً بنفس الطريقةتمرير النص المكتوب، حيث أن الإجراء يسمح بتمرير قيمة أو أكثر حسب الحاجة ..
وبهذا سيتم تغيير المثال ليصبح الإجراء كالتالي:


برنامج:
كود PHP:
Sub WriteInText(ByVal Text**** As Control, ByVal WritedText As String)
Text****.BackColor = System.Drawing.Color.Cyan
Text****.Text = WritedText
End Sub

بعد ذلك نقوم باستدعاء الإجراء معتمرير القيمتين إليه، كالتالي:


برنامج:
كود PHP:
WriteInText(TextBox1, "المحتوى البرمجى لتكنولوجيا الويب")

والآن ننتقلإلى إمكانية أخرى، ولاحظ أننا نحاول الإلمام بجميع الإمكانيات لاستخدامها فيما بعدطوع إرادتنا ..
سنسمح الآن للمستخدم بتمرير قيمة النص المكتوب وفي نفس الوقت لننجبره على ذلك، بمعنى أنه لو قام المستخدم بتمريره فإنه سيظهر كالعادة، وإذا لميمرر شيئاً فسيقوم الإجراء بتمرير القيمة الافتراضية، والتي سنحددها نحن فيالإجراء، وسيكون الكود كالتالي:


برنامج:
كود PHP:
Sub WriteInText(ByVal Text**** As Control, Optional ByVal WritedText As String = "www.al-ebda3.info")
Text****.BackColor = System.Drawing.Color.Cyan
Text****.Text = WritedText
End Sub


كما ترى قمنا بإضافة الكلمة optional قبل الكلمة ByVal، كما أننا قمنا بتحديد القيمة الافتراضية والتي سيتم وضعها في حال لم يمرر المستخدم أي قيمة ..
لاحظ أنه لابد أن تحدد المعامل أو القيمة الافتراضية ..
ولاحظ أنه لابد أن تكون المعاملات - سواء كان واحداًً أو أكثر - في آخر الإجراء ولا يمكن أن يتقدم المعامل الاختياري على المعامل الإجباري ..


الفرق بين الكلمة ByVal و ByRef:
الكلمة ByVal تقوم بتمرير قيمة المتغير فقط، أي أنه لو قمنا بتمرير متغير إلى الإجراء فإنه سيأخذ نسخة من القيمة الموجودة في المتغير، وبعدها يتعامل مع هذه القيمة بالزيادة أو النقص أو التغيير، ولن يؤثر ذلك شيئاً على القيمة الأصلية الموجودة في المتغير، لأن التغيير كله سيقع على النسخة المأخوذة من قيمة المتغير ..

أما الكلمة ByRef فإنها تقوم بتمرير عنوان المتغير نفسه إلى الإجراء، وبالتالي فعند تغيير القيمة الممررة فإن ذلك سيتم في المتغير الأساسي، وسيتغير بناء على ذلك ..