Search VB 2010

Saturday, April 30, 2011

OOP VB .Net Toturials and Examples - دروس فى ال أو أو بى

بدأنا مشروع تطوير الــ TextBox

أولا : تغيير اسم الاداه من UserControl1 الى MyNewTxtBx

صورة رقم 46

صورة رقم 47

نتوجه الى شاشة كود UserControl1 فى السطر الاول Public Class UserControl1 و نغيره الى MyNewTxtBx أو أى أسم ترغب به كما بالصورتين 46 و 47
و نقوم بعمل Build و تجربة المشروع و ستلاحظ أن الاسم الموجود بالـ ToolBox تغير الى الاسم الجديد .
انتهــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــى
ثانيا : تغيير شكل الايقونه الى ايقونة خاصه
هذا هو شكل الايقونه التى نستخدمها و هى تعطى لأى أداه جديده مصنوعه عن طريق المبرمج (نحن) و هى صورة الترس الازرق و لكن شكل ايقونة الـ TextBox مختلف و يدل على أنه TextBox و نريد كما اتفقنا على جعل الاداه قويه وفعاله و بالتالى يجب الاهتمام بالتصميم و لكى نقوم بتغيير الايقونه سنستخدم Attributes أو مواصفات.
و يجب أن نحدد ما اذا كنا سنستخدم شكل ايقونة الـ TextBox المتعارف عليها أو أيقونه جديده و لكن احذر من استخدام ايقونه ملك شخص أخر أو شركة أخرى فمن الممكن جدا أن تلقى الاداه رواج فى سوق العمل و تجد نفسك أمام مسائلات أنت فى غنى عنها من شركة ماكله للايقونه لذا من الافضل و المستحب و الأأمن أن تصنع لنفسك أيقونات .
بداية فى شاشة الكود الخاص بـ MyNewTxtBx قبل بداية الاكواد نكتب
Imports System.CompnentModel
و هو استدعاء لمكتبة الـ ComponentModel

صورة رقم 48

ثم الـ Attributes كالتالى كما بالصورة رقم 48 مع ملاحظة ان الاتى سيكون لتغيير شكل الايقونه الى شكل يقونة الـ TextBox المتعارف عليها ..... و الان قم بعمل Build و اذهب الى الـ ToolBox ثم Choose Item و احذف العلامه بجوار الـ MyNewTxtBx القديمة ثم Ok تلاحظ أنها اختفت و بالتالى احذفها من على الـForm احفظ المشروع ثم افتح الـ Form مرة أخرى و توجه الى الـ ToolBox ثم Choose Item ثم Browse ثم الفولدر Bin/Debug و اختار الاداه و لاحظ تغير شكل الايقونه كما بالصورة رقم 49 .
صورة رقم 49

و الى هنا نكون قد انتهينا من درس من أهم دروس البرمجه و هو صناعة الاكواد و الاداوات عن طريق فهم OOP أو Object Oriented Programming ....
ملحوظه أخيره : سيقابلك بالتأكيد وقفات فى التنفيذ و أخطاء غير مذكورة فى الشرح و ذلك لأنها تختلف من مبرمج الى أخر و تكون بديهيات و اخطاء لا تذكر, فقط اكتب تعليق بالمشكله و ان شاء الله فى أقرب وقت يكون لديك الحل .ويمكنك دائما البحث فى الجوجل عن (evry1falls) للمساعده .
شكرا

OOP VB .Net Toturials and Examples - دروس فى ال أو أو بى

بدأنا مشروع تطوير الــ TextBox

 خاصية IsDate التى سنقوم ببرمجتها الهدف منها التحكم فى المكتوب بالـ NewTextBox هل هو تاريخ أم لا ! و بالتالى سيكون نوع الخاصيه Bolean أى تحتمل الـ True أو الـ False بمعنى اذا كانت True فانه يمكن للمستخدم كتابة تاريخ و العكس فى حالة False .
صورة رقم 40
و كما فى المثال السابق لبرمجة خاصية TypeOfChr قمنا بعمل متغير Ch بالمثل هنا سنقوم بعمل متغير Dt نوعه من نوع الخاصيه Bolean حيث سيقوم المتغير Dt بتخزين القيمة Set و استرجاع القيمه Get من المتغير Value .... صورة رقم 40
و نقوم بعمل Build للأداه الجديده و ننتقل الى الـ Form1 و نتحقق من شاشة الخصائص نجد أن الخاصية ظهرت بالفعل .. كما بالصورة رقم 41 .

صورة رقم 41

نقوم الان ببرمجة الاداه للاستخدام ... المفروض اختيار True معناه تمكين المستخدم من كتابة Date فقط و False معناه كتابة أى نوع (تاريخ - ارقام - حروف ..... الخ) و سيكون ذلك للحدث Leave حيث سيقوم البرنامج بمعرفة نوع المكتوب فى الاداه عند تركها Leave و الانتقال الى Focus لها ايضا , و يكون الكود كما فى الصورة 42 .

صورة رقم 42

و الكود يقول : فى الحدث Leave اذا كانت الخاصيه IsDate نوعها True أى أن المستخدم (المبرمج) جعل الكتابه على شكل تاريخ فقط و نوع المكتوب فى الاداه ليس تاريخ , اذا اترك الاداه و اظهر رسالة اعتراض Error In Date Format.
و نقوم بالتجربة (قم بعمل Build و اضف الاداه الى الـ Form1 بعد ازالتها و اضف TextBox1 عاديه لتجربة الحدث Leave و لا تنسى ان تجعل TypeOfChr = Both و الـ IsDate = True) و قم بعمل Save ثم Run او اضغط F5 ..... و اكتب فى الـ UserContor1 على الـ Form1 أى شىء ثم انتقل بالماوس على الـ TextBox تلاحظ رسالة الخطأ كما بالشكل رقم 43 .
صورة رقم 43
و بالتالى نكون قد انتهينا من التصميم و لكـــــــــــــــــــــــــــــــــن ! الادوات بالذات يجب أن تكون Perfect و لا تدع بها مجالا للصدفه فإن المستخدم الذى يستخدمها هو مبرمج لذا سنقوم بتحسين شكل رسالة الخطأ و ندع الامر للمستخدم ليحدد الرساله الذى يرغب فى اخراجها لمن يصنع له البرنامج .... سنقوم بعمل Event ... و سيكون هذا الحدث هو رسالة الخطأ و بالتالى سنقوم بعمل حدث جديد سنأتى بعد نهاية كود الخاصية IsDate و نكتب الكود :
Public Event IsDate_Msg()
صورة رقم 44
و نقوم بحذف رسالة الخطأ من الحدث Leave و نكتب مكانها RaiseEvent IsDate_Msg أى (عند تحقيق الشرط السابق قم باطلاق هذا الحدث) و ندع قيمة الحدث للمبرمج يكتبها كما يشاء و لا نحدده برسالة خطأ معينه حتى تكون الاداه Dynamic & Flexible ..... نقوم بالتجربة و ندخل على الـ Form1 و نتوجه الى شاشة الكود الخاصة الاداه UserControl1 على الـ Form1 و نبحث عن الحدث IsDate_Msg و نكتب به أى رسالة و ننفذ المشروع و نلاحظ أنه فعلا ظهرت الرساله التى كتبناها الان و هذا ما سيقوم به المبرمج الذى ستعطيه الاداه ... صورتان 44 - 45 .
صورة رقم 45
ماذا الان ؟؟؟
أولا : تغيير اسم الاداه من UserControl1 الى MyNewTxtBx
ثانيا : تغيير شكل الايقونه الى ايقونة خاصه
ثالثا : تعلم كيفية اضافة تأثير الى الاداه الجديده حتى تصبح مميزه Marquee النص المتحرك .

Tuesday, April 26, 2011

OOP VB .Net Toturials and Examples - دروس فى ال أو أو بى

بدأنا مشروع تطوير الــ TextBox

Enum
 هى اختصار لـ Enumeration أو القائمه أو السرد و هى من مميزات الـ VB.Net و التى عن طريقها سنستطيع جعل خاصية TypeOfChr بها اختيارات (Number - Text - Both) ..... ننقل الكود الموجود الصورة رقم 36
صورة رقم 36

- و هنا قمنا بعمل Enum اسمه Chr بالضبط مثلما نقوم بعمل خاصيه و لكن فى هذا المثال المطلوب عمل Enum أو قائمه للــ Property لعرض متغيرات الــ Property للــ Control الجديد , يتكون الـ Enum من ثلاث قيم Values هى (Number - Text - Both) ثم اغلاق كود الـ Enum .... المفروض ان تجد الان خاصية TypeOfChr فى شاشة الخصائص للـUserControl1 الموجود على الـ Form1 و لكن لا تجدها لأننا لم نقم ببرمجة هذه القيم لتظهر فى شاشة الخصائص بعد ....
الان : نأخذ نسخه من الـ Enum للعمل عليها كالتالى Public Ch As Chr و هنا المتغير Ch يمثل الــ Enum Chr و معناه اننا عندما نريد مخاطبة الـ Enum Chr فاننا نتحدث مع الـ Ch ...
الخاصيه TypeOfChr : كما بالصورة رقم 37
صورة رقم 37
- و هنا قمنا بكتابة كود الخاصيه كما تعلمنا سابقا فظهر الاجراء Get و الاجراء Set و السؤال الان كيف تعمل هذه الخاصيه ؟
تعمل هذه الخاصيه عند اختيار المستخدم


ايا كان لقيمه من الثلاث قيم (Number - Text -Both) اذا يجب ان تبنى هذه الخاصيه على الـ Enum Chr لذلك تلاحظ ان كود الخاصيه هو Public Property TypeOfChr As Chr .... الاجراء Get يعود بقيمة الـ Chr و الاجراء Set يقوم بتخزين قيمة Chr المعطاه اليه فى المخزن Value و الذى بدورة ايضا نوعه Chr كما درسنا فى درس الخصائص اذا الخاصيه معتمده على Ch ..... الان تلاحظ أن الخاصيه انشأت بالفعل .... اين ؟؟؟
صورة رقم 38

- من قائمة Build قم باختيار Build MyNewTextBox ثم اظهر الـ Form1 و قم بحذف الـ UserControl1 الموجوده عليها و قم بعمل Save للمشروع ثم أعد اضافة الـ UserControl1 مكانها مره أخرة على الـ Form1 بنفس الطريقه الا اننا سنختصر الطريقه حيث سنجد الـ UserControl1 موجوده بالفعل فى قائمة Tools و بعد وضعها على الـ Form1 لاحظ الخصائص .... كما بالصورة رقم 38
حيث أن الخاصيه أصبحت موجوده بالفعل ..... قم بتجربه المشروع و لكن ماذا اذا اخترت Number من القائمة ؟؟؟؟ لا يحدث شىء لأننا لم نبرمج قيم الـ Enum أو القائمة ....
- هنا سنقوم ببرمجه كلا من Number - Text - Both عن طريق الحدث UserControl1_KeyPress لأن الـ KeyPress هو المسؤل عن نقل القيمة من الـ KeyBoard الى الــ TextBox الجديده و هنا سنقوم باعطاء أمر للبرنامج أنه عند اختيار القيمة Number من الخاصيه TypeOfChr للـ TextBox فإنه لن يعرض الا Numbers أرقام فقط و بالمثل بالنسبه للــ Text و لكن عند اختيار Both فانه يمكنه الكتابه كما يشاء ... انقل الكود كما الصورة رقم 39 .
من الواضح اننا استخدمنا Select Case للــ Enum Chr :

صورة رقم 39
ففى الــ Case Number اذا كان الــ E.KeyChar لا يساوى رقم فانه يمتنع عن الكتابه ... لكن ما هو الـ e.KeyChar ؟؟؟؟؟؟
الاجراء KeyPress كأى اجراء فتكنولوجيا الـ VB.Net له معاملان Parameters هما (Sender - E) أما الـمسؤل عن تخزين خصائص الحدث كالحدث KeyPress يقوم الـ E بتخزين أحداثه و خصائصه فيقوم بالتعرف على المفتاح الذى قمت بالضغط عليه قبل ظهوره فى الـ TextBox عن طريق معامل الـ KeyChar الخاص به . تمام ؟؟
و يمتنع البرنامج عن الكتابه عن طريق الامر e.Handled=True و التى تساوى KeyAscii=0 فى الــ VB0.6 أو انه لن يكتب شىء فى الـ TextBox .....
و نفس الموضوع للــ Text .... و لن نقوم بعمل أكواد لـ Both لأن المشروع يكتب عموما أرقام و حروف معا اذا لم نختر ايا من Number أو Text .
قم بتجربة المشروع عن طريق عمل Run له و لاحظ الفرق عند اختيار Number او Text أو Both .
ملحوظه : الداله IsNumeric وظيفتها التأكد من أن الــ Control محل الكتابه يكتب أرقام أم لا ..
و الان سنقوم ببرمجة خاصيه أخرى و هى IsDate و وظيفتها التأكد من أن المكتوب فالـ Control الجديد TextBox تاريخ أم لا و التعامل مع رسائل الــ Error و كيفية اظهارها لمستخدم الــ Control سواء كان مبرمج أو مستخدم للبرنامج .....

To Be Continued .......... تابعونا

Sunday, April 24, 2011

OOP VB .Net Toturials and Examples - دروس فى ال أو أو بى

تعرفنا على الوراثه Access Modifiers

 مشروع عملى لتطوير الــ TextBox
صورة رقم 28

و سيكون ذلك عن طريق اضافة خاصيه جديده كمثال ثم استخدام الـ TextBox الجديده فى مشاريعك الخاصه بعد ذلك و هى خاصية TypeOfChr أو نوع الكتابه فى الـ TextBox (نص - رقم - كلاهما) .
بداية : قم بعمل مشروع جديدمن نوع (Windows Control Liberary) فالــ TextBox فى النهايه هى Control كما بالصورة رقم 28 لكن سنقوم بتغيير الاسم الى MyNewTextBox و الامر يعود اليك ...... و ستتم عملية التطوير عن طريق استخدام خاصية Inheritance أو الوراثه حيث سنقوم بفتح الـ Class TextBox و وراثته و الاضافه عليه .... كيف ؟؟؟
انظر الصورة رقم 29 حيث نتوجة الى شاشة Solution Explorer و نختار Show All Files ستظهر لنا جميع الملفات ثم نذهب الى UserControl1 و نفتح القائمه التى يمثلها نجد ملفين (Resx - Designer) نختار Designer

صورة رقم 31

صورة رقم 30

لاحظ : عند فتح ملف الـ Designer للتعديل كما بالصورة رقم 30 كود الوراثه نقوم بتغيير كلمة UserControl الى TextBox لأننا سنرث الـ TextBox و ايضا يوجد اجراء اسمه InitializeComponent يحتوى على سطرين أكواد عباره عن تحديد مكان الـ Control الجديد الذى نعمل عليه و الذى يعتبر الان هو الـ TextBox و بالتالى لن نلتزم بمكان الـ Control الجديد لذا سنقوم بتحويل السطرين الى Comments حتى نبطل عملهم كما بالصورة رقم 31 و نقوم بالحفظ Ctrl+S ..... ثم سنقوم باضافة مشروع (Add Project) من قائمة File و فائدته أننا سنقوم بتجربة الـ Control الجديد عليه , الان قم باضافة الـ Control الجديد UserControl1 على الـ Form1 بالمشروع المضاف .... و لكن كيف ؟؟؟
صورة رقم 29
سنتوجه الى الــ ToolBox و نقوم بعمل Right-Click و نختار Choose Item حيث ستفتح شاشه جديده كما بالصورة رقم 32 و رقم 33 و نختار الــ Control الجديد UserControl1 و المسمى MyNewTextBox من المجلد Release من داخل المشروع  و بعدها سيظهر فى قائمة ToolBox باسم UserControl1 نقوم باضافته الى الــ Form1 سنلاحظ أنه أخذ شكل الــ TextBox عند اضافته ..... و هنا نكون قد انتهينا من تصميم الـ Control الجديد الموروث من الـ Control TextBox و الان حان وقت البرمجه و هى برمجه الخاصيه TypeOfChr .....

صورة رقم 33

صورة رقم 32

صورة رقم 35

نفتح شاشة كود الـ UserControl1 نجدها كما بالصورة رقم 34
صورة رقم 34
 وقفه ................... الان ماذا نريد (نريد عمل خاصيه أى أننا المفروض بعد الانتهاء سنحصل على خاصيه موجوده فى شاشة الــ Property كما بالصورة رقم 35 للأداه التى قمنا بوراثتها الان و هى TextBox و تكون الخاصيه عباره عن ComboBox به 3 اختيارات Number - Text - Box حيث بعد اضافة الاداه على الـ Form  يمكن للمستخدم اختيار Number اذا اراد ان يكتب أرقام فقط ,,, المستخدم هو المبرمج الذى سينتقل له الاداه أو من تقوم بصناعة الاداه له لاستخدامها سواء فالبرمجه أو لمشروع لعميل ...... و السؤال الان كيف نصنع ذلك ؟؟
الاجابه عن طريق الــ Enum


Saturday, April 23, 2011

OOP VB .Net Toturials and Examples - دروس فى ال أو أو بى

تعرفنا على الوراثه Inheritance


Access Modifiers
تابع المشروع السابق :
لدينا الان الاجراء A فى Parent ..... ماذا يحدث اذا قمنا بعمل اجراء بنفس الاسم A فى Child.
قم بتنفيذ السابق : و نأتى على الفورم و فى الحدث Button1_Click نكتب الكود :
Dim X As New Child()
X.A()
ماذا تتبع هذه الــ A ...؟ هل الــ Parent ؟ أم الــ Child ؟
هى تتبع الـ Child و سيقوم البرنامج بتنفيذ الكود و لكن ستلاحظ خط أخضر تحت الـ A و هذا معناه أن هناك شىء غير منطقى و يكون الحالى بسيط .... سنقوم بعمل OverRide لــ A بمعنى ان الـ Child سيكون به A و الـ Parent سيكون به A أخرى على الرغم من أن Child يرث الــ Parent و يكتب الكود بهذا الشكل فى كلتا المنطقتين Parent و Child ...
فى الـ Parent يكون :
Public OverRidable Sub A()
MsgBox ("I Belong to the Parent")
End Sub
و فى الـ Child يكون :
Public OverRides Sub A()
MsgBox ("I Belong to the Child")
End Sub
قم بتجربة الكود تلاحظ أنه يقوم بتنفيذ الـ A التابعه للــ Child
و فى هذه الطريقه OverRide فإنه من اللازم استخدام نفس الـ Arguements فى كلا من الـ Parent و الـ Child بمعنى اذا قمنا بإضافة متغير للاجراء A فى Parent كالتالى :
Public OverRidable Sub A(ByVal XXX As Integer)
MsgBox ("I Belong to the Parent")
End Sub

جرب تنفيذ البرنامج ستلاحظ خطأ .. حيث يجب جعل الأجراء A بنفس الشكل فى الـ Child .... و لكى نتخلص من هذا العيب مع الاحتفاظ بالميزه سنستخدم Shadows و هو ايضا من الــ Access Modifiers حيث يفضل عن الـ OverRide بالنسبه للجراءات المنفصله و ذو نطاق واسع فى الاستخدام و الفرق بينهما هو :
Shadows : يمكنك عمل Arguements جديده فى الــ Child منفصله عن الــ Parent
OverRide : لا يمكنك عمل Arguements جديده فى الــ Child منفصله عن الــ Parent
و الان سنقوم بدراسة موضوع أخر و هو الــ PolyMorphism أو تعدد الأوجه
مثال عملى :

صورة رقم 22


فى نفس المثال السابق قم باضافة عدد (3) Class جديده و لنفترض أننا نريد برمجة مكتبه تتعامل مع الـOFFICEـ ( Word - Excel - Power Point) و نريد عمل اجراء للفتح Open ....
سنقوم بعمل الـ Class الثلاثه بأسماء Word - Excel - Power Point ثم انقل الاكواد الموجوده بالصورة رقم 22
المفروض ان يقوم الاجراء Open بتنفيذ عملية فتح New File كما موضح فان الاجراءات الثلاثه المتطابقة تعتمد على متغير نصى و هو File و الذى سيرمز الى أنواع الملفات .
ثم لاستكمال المشروع سنحتاج الى اجراء للحذف Delete و أخر للتعديل Edit و الى أخره سنجد أنفسنا نكرر الكود بعدد أنواع التطبيقات سواء كانت Word او Excel الى اخره .... و الحل فى عمل Interface أو واجهة استخدام ... كيف ؟؟؟
 انظر الصور 23 و 24

صورة رقم 23


صورة رقم 24

و توضح الصورتان كيفية اضافة InterFace جديد للمشروع ...
و يستخدم الـ Interface فى صناعة المكتبات الكبيره و عن طريق الأدمن Admin للجروب فى توزيع الادوار على الفريق و هى خاصية سهلة الاستخدام و يمكنك الاستغناء عنها اذا كنت من محبى الـ Copy و Paste
والان سنقوم بالرجوع الى مشروعنا و نضيف بعض الاكواد كأمثله لبرنامج يتعامل مع الـ Office كما بالصوره 25


صورة رقم 25

و كما هو موضح بالصورة فاننا ايضا سنقوم بتكرار نفس الاكواد فى كلا من Excel و PowerPoint Class و تخيل كمية الاجراءات و الخواص المطلوب عملها ......
ثم نقوم باضافة الـ Interface و نقوم بتجميع عناوين الاكواد فقط فيه كما بالصورة رقم 26 حيث قمنا بتجميع كلا من الاجرائين Open و Delete و الخاصيه FileName .
صوره رقم 26

صورة رقم 27

الان توجه الى الـ Class Word و احذف ما به من أكواد و اكتب فقط
Implements Interface1 و اضغط على Enter كما بالصورة رقم 27 و لاحظ أن المشروع قام بصناعة جميع الاكواد لك ... قم بتكرار الموضوع فى كلا من Excel و PowerPoint .......






سنقوم الان بالدخول على مشروع عملى عباره عن تطوير Class TextBox

Thursday, April 21, 2011

OOP VB .Net Toturials and Examples - دروس فى ال أو أو بى

تعرفنا على الوراثــة Inheritance

تابع الوراثه Inheritance
نفترض انك طلبت من أحد المبرمجين صناعة Class لك لاستخدامه فى مشاريعك و قد تم بالفعل كما طلبته و بعد فتره احتجت الى تعديل لعمل هذا الــ Class مع العلم أن الـــ Class مغلق أى لا يمكن فتحه و تعديله ... ما العمل ؟؟
هنا سنقوم بصناعة Class جديد مبنى على الــ Class القديم حتى و لو كان القديم مغلق , مع العلم أن الـ Class الجديد لن يعمل الا فى وجود الــ Class القديم ........... مثال عملى :
مشروع جديد عبارة عن :
عدد (1) فورم + عدد (2) كلاس (Parent - Child)
Public Class Parent
Public Sub A()
MsgBox ("Sub A in Parent")
End Sub
End Class
قمنا بعمل اجراء اسمه A فى الـ Class Parent عبارة عن MsgBox .... نتوجه الى الـ Form و نضيف Button1 و فى الحدث Button1_Click نكتب :
Dim X As New Parent
X.A()
نقوم بتجربة المشروع .... سنجد انه نفذ الكود ...
Public Class Child
Inherits Parent
End Class
نقوم بتجربة الخطوه التاليه بدلا من الخطوه السابقه ..
Dim X As New Child
X.A()
نقوم بتجربة المشروع .... سنجد انه نفذ الكود ...
نقوم باضافة Class اسمه Another_Child الى المشروع
Public Class Another_Child
Inherits Child
End Class
لدينا الان :
Another_Child يرث Child يرث Parent
استخدام الــ Access Modifiers
و تسمى ايضا بالــ KeyWords و هى مثل (Public - Private - Friend - Protected) و بالاضافه الى المشروع نفتح الـ Class Parent و نضيف الاجراءات الاتيه :
(1)
Friend Sub B()
MsgBox ("Sub B In Parent")
End Sub
(2)
Sub C()
MsgBox ("Sub C In Parent")
End Sub
(3)
Private Sub D()
MsgBox ("Sub D In Parent")
End Sub
(4)
Protected Sub E()
MsgBox ("Sub E In Parent")
End Sub
ما الفرق بينهم ؟؟
1- Friend : يمكن استخدامه داخل المشروع فقط
2- بدون : معناها Public طالما نعمل داخل الـ Class و معنى Public هو انه يمكنك التعامل معه داخل و خارج المشروع
3- Private : يمكن استخدامه داخل الـ Class فقط
4- Protected : يمكن استخدامه داخل الــ Class و لكن فى المناطق المعرف بها فقط .
كيف نمنع وراثة الـ Class ؟
كالتالى ..............
Public NotInheritable Class A()
و فى هذه الحاله لن نستطيع وراثة الــ Class بأى شكل من الأشكال .


Tuesday, April 19, 2011

OOP VB .Net Toturials and Examples - دروس فى ال أو أو بى

تعرفنا على الخصائص OverLoading

الوراثة - Inheritance
الوراثه هى : كيفية بناء فئه جديده فرعيه Sub Class أو فئه ابنه Child Class أو فئه مشتقه Derived Class من فئة رئيسية تسمى الـ Main Class أو الفئة الأم Parent Class و هو لا يختلف كثيرا عن مفهوم الوراثه العام .
حيث أن أكواد الفئات الفرعيه بجميع مسمياتها ترث خواص (أكواد) الفئه الرئيسية
مثال عملى :
قم بعمل مشروع جديد يحتوى على Form1 بها عدد (2) Button + عدد (1) Class اسمه Egypt
قم بحفظ المشروع Ctrl+S.
اكتب الاكواد الموضحه بالصورة رقم 19
صورة رقم 19
و هو عباره عن أكواد الـ Class Egypt وهة متغيرات رقمية ... السؤال الان كيف يمكننا تطبيق مبدأ الوراثه Inheritance أو كيف يمكننا نقل الــ Class Egypt  الى Class أخر فرعى Child و ليكن C_Egypt ؟؟؟
 - سنقوم بعمل Class جديد C_Egypt بعد الـ Class Egypt بهذه الطريقه :

Public Class C_Egypt
Inherits Egypt
End Class
و سنأتى على الـ Form1 فى الحدث Button1_Click و نقوم بتجربة الـ Class الجديد أو الفرعى ... نكتب الاكواد كما بالصورة رقم 20
صورة رقم 20
حيث قمنا بأخذ نسخه من الــ Class الفرعى C_Egypt الذى هو فرعى من الـ Class Egypt و قمنا باعطاء قيمة للمتغيرات الموجوده بـ Egypt و التى بالتالى اصبحت موجوده بالـ Class الفرعى C_Egypt و عند تنفيذ المشروع تظهر الرساله بنجاح .
و هذا هو ببساطه معنى وراثه Inheritance .
لاحظ : يمكننا عمل كود وراثه فى نفس سطر تعريف الـ Class .......... هكذا :
Public Class C_Egypt :Inherits Egypt
و هو نفس الكود ...
و لاحظ ايضا : الوراثة لا تتم فى أكثر من Parent و لكن يكون Child لكل Parent أى كل Class فرعى يرث Class رئيسى واحد ............ و بالتالى فإن الكود التالى خاطىء
Public Class M_Egypt
Inherits C_egypt
Inherits Egypt
End Class
حيث أن Inherits Egypt لا تنتمى الى هذه الوراثه فالــ Class الفرعى M-Egypt يرث الــ Class C_Egypt و يصبح C_Egypt رئيسى لــــ M_Egypt ........... و هكذا
طريقة التعديل فى المكتبه الرئيسية أو الــ Class الرئيسي باستخدام مفهوم الوراثه :
اضف الكود الموجود بالصورة رقم 21
صورة رقم 21

و هذا الاجراء موجود بالكلاس و هو اجراء مبنى على متغير رقمى و هو عباره عن معادله Cairo =+ C_Cairo_Cairo و لكن يمكن كتابتها بهذا الشكل كما بالصورة
الان نذهب الى الـ Form و على الحدث Button2_Click نكتب الاكواد كما الصورة رقم 22
و ايضا سنضيف Class يرث الــ Class C_Egypt و ليكن كلاس ABC

 21 صورة رقم
لاحظ النتيجه : قام بتنفيذ المعادله .... ما معنى ذلك ؟؟!!
معناه : المتغير Cairo فى الــ Class الرئيسي Egypt قيمته محدده و قمنا بوراثته فى الــ Class الفرعى C_Egypt و قمنا براثة C_Egypt فى الــ Class ABC و عن طريق المعادله Cairo=+C_Cairo قمنا بتغيير قيمته ... أى أننا قمنا بتعديل الـ Class Egypt الرئيسى و أكواده عن طريق Class ABC الفرعى باستخدام الوراثه Inheritance .


Sunday, April 17, 2011

OOP VB .Net Toturials and Examples - دروس فى ال أو أو بى

تعرفنا على الخصائص Properties

نقوم بعمل مشروع جديد Project1 - نوعه Windows Application - و الهدف منه انشاء MsgBox - و يتكون من عدد (2) فورم
الاولى باسم (Form1) و الثانيه باسم (Msg) و ايضا Module1
فى الـفورم Form1 نضيف مفتاح
فى الفورم Msg نضيف عدد (2) Button + عدد (1) Label
- جميعنا يعرف الـ MsgBox و هى عبارة عن Form عاديه بها مجموعه من الخصائص و الدوال و الاجراءات المبرمجه و فى هذا المثال سنقوم بعمل MsgBox مصغر يمكننا استخدامه فى جميع المشروعات .
أكواد الموديول :
Public Function Msg1(ByVal Prompt As String)
Msg.Label1.Text = Prompt
Msg.Show()
و فى هذا الكود نقوم بعمل Function اسمها Msg1 مبنيه على متغير اسمه Prompt نوعه String متغير نصى
Prompt سيكون المسؤل عن نقل قيمة الــ Msg1 .
بينما فائدة هذه الداله هو استدعاء الفورم رقم 2 Msg و التى تمثل MsgBox المصغرة و مساواة قيمتها Prompt بقيمة Label1 فى الفورم Msg و بالتالى أى قيمة يأخذها Label1 هى قيمة الــ Prompt و بالتالى قيمة Msg1.
فى الفورم Form1 فى الحدث Button1_Click
Msg("Hello World")
الان قم بتنفيذ المشروع Run و عند الضغط على Button1 فى الـ Form1 لاحظ النتيجه ....
سنقوم الان بزيادة بعض الخصائص و القيم للـ Msg1 المصغرة . كما بالصورة رقم 17
لاحظ : الخصائص جاءت قبل Msg1.ShowDialog و المسؤله عن اظهار الـ Msg1 حيث يجب تنفيذ الاكواد قبل اظهار الرساله.
يمكنك كتابة جميع الاكواد الممكنه فى المنطقة قبل Msg1.ShowDialog
صورة رقم 17

- انتقل الى الحدث Button1_Click و اكتب Msg1 اضغط على مسافه ستجد أن معاملات الداله Msg1 مطلوبه منك قم بالتعويض عنها و نفذ المشروع ...


سنقوم الان باضافة دالة جديده و لكن بنفس الاسم و سنضع بعض الخصائص كما بالصورة رقم 18
صورة رقم 18
و لاحظ : عند التعويض فى الحدث Button1_Click عن قيمة الـ Msg1 ستجد أن المعاملات Parameters المراد التعويض عنها اصبحت نوعين عباره عن معاملات الداله الاولى و معاملات الداله الثانية و هذا يسمى بالـــ OverLoading
و يستخدم الــ OverLoading للتعامل مع الدوال كما فى المثال لاعطائها ديناميكية أكثر للتعامل فيمكنك عن طريق هذه الخاصيه أن تقوم باضافة أحداث و خصائص و إجراءات جديده للدالة Msg1 لا يمكنك تجميعها تحت سقف واحد و لكن عن طريق تقسيمها الى مجموعه من الدوال أو الاجراءات أو الخصاص و جميعها ستصب فى نفس الداله فى النهاية .
و عند التنفيذ يتلاحظ أن المشروع يطلب منك اختيار مجموعه معينه من اجراءات الداله Msg1 لتنفيذها ....
و على سبيل المثال قم باضافة داله ثالثه بنفس الاسم
Public Function Msg1 (ByVal Prompt As Integer)
Msg.Text = Prompt
Msg.ShowDialog()
لاحظ ان عند تنفيذ الكود أصبح مطلوب منك اختيار 3 مجموعات من الاكواد اتنفيذها منها Prompt كمتغير رقمى و هكذا ....

OOP VB .Net Toturials and Examples - دروس فى ال أو أو بى

تعلمنا المزيد عن الــ Class ...

الخصائص أو Properties
- كيف نقوم بعمل خاصيه داخل الـــ Class ؟؟؟
- لكى نجيب على هذ التساؤل يجب أولا قراءة الاتى بتمعن :
............. ما هى وظيفة الخاصية ؟
- هى نفس وظيفة المخزن (المتغير) تقوم بتخزين قيمة داخلها لحين استخدامها ............
- سنقوم بعمل مشروع جديد Windows Application يحتوى على Form و Class
1) نفتح الـ Class1 و نكتب فيه الكود الاتى :
Public Proprty Test()
و نضغط على Enter تلاحظ : تم اضافة سطور جديده تلقائيا كما بالصورة رقم 10
صورة رقم 10
حيث Get هى المسؤله عن استرجاع القيمه Value
       Set هى المسؤله عن تخزين القيمه Value
القيمة Value هى القيمة الافتراضيه لمدخلات الخاصيه أو بمعنى اخر هى المسؤله عن تخزين القيمه ف الاجراء Set و يمكن استبدالها بأى اسم متغير اخر, و لكن يجب ان يكون نوع المتغير Value من نفس نوع الخاصيه بمعنى :
اذا قمنا بكتابة كود الخاصيه الموضح بالصورة 10 بشكل تانى :
Public Property Test() As Double
Get
Codes .......................
End Get
Set (ByVal Value as Double)
Codes .......................
End Set
End Property
ايضا من ضمن الفروق ين المتغير (المخزن) و الخاصيه أن المتغير لا يمكن عمل قيود أو Validation على النتيجه و لكن يمكن عمل ذلك بالخاصيه ...
- و الخواص تنقسم الى
1) ReadWrite قراءة و كتابة
2) ReadOnly قراءه فقط
3) WriteOnly كتابه فقط
1) ReadWrite Property خاصية تسمح بالقراءه و الكتابه كما بالصورة رقم 11
صورة رقم 11
وظيفة الخاصيه التى تسمح بالقراءه و الكتابه هى (التخزين و الاسترجاع للقيمه Value) أى يمكنها عمل القيام بالعمليتين معا و فى المثال الموضح بالصورة 11 سنبدأ كتابه هذا الكود فى الـClass1 مباشره بعد المكتوب فى صورة رقم 10 و المثال يشرح كيفية عمل خاصيه تقوم باخراج رساله بجميع الارقام <= 40000 و لكن تعطى رسالة اعتراض على اى مبلغ أخر أكبر و لتجريب المثال انظر صورة رقم 12 .
يقوم الكود بتنفيذ Set ثم Get و Y عباره عن متغير وسيط لتحقيق الشرط حيث لا يمكن استخدام X فى المنطقة Get لانها منطقه منفصله تماما عن Set .
الان قم باضافة متغير بعد الخاصيه بنفس الاسم و ليكن الكود :
صورة رقم 12
Public Salary As Double
و لاحظ الاعتراض حيث انه تم Salary كخاصيه فى نفس الـ Class
نقوم بتغيير Salary الى Salary1 و نذهب الى الحدث Button1_Click و نكتب الكود

C.Salary1 = 2000
MsgBox (C.Salary1)
لاحظ ان  الكود يشبه نفس كود الخاصيه و لكن يمكنك اعطاء قيمه لــ Salary1 كما تشاء و لكن لا يمكنك اعطاء لـ Salary الخاصيه اكبر من 40000 .
2) ReadOnly Property خاصية تسمح بالقراءه فقط كما بالصورة رقم 13
صورة رقم 13

سنقوم باضافة الخاصيه كما بالشكل و نكتب ReadOnly و بعد كتابة سطر الخاصيه نضغط Enter نلاحظ أن الاجراء Get فقط هو الذى تم تنفيذه و ذلك لأننا سنقوم باسترجاع القيمه و ليس تخزينها لأن ReadOnly عباره قراءه فقط .
ماذا سنقرأ ؟؟
صورة رقم 14

سنقرأ قيمة XX المتغير الذى تم تعريفه لأنه لا يوجد لدينا قيمه Value و لكى نعطى قيمه لــ XX انظر الصورة رقم 14 .
حيث قمنا باضافة Button2 للـ Form و فى الحدث Button2_Click نكتب الكود الموضح بالصورة و هو كود اعطاء قيمة لــ XX و المعرفه على مستوى المشروع و عند القيام بتنفيذ الكود بالضغط على Button2 تظهر رسالة Welcome .
3) WriteOnly Property خاصية تسمح بالقراءه فقط كما بالصورة رقم 15
صورة رقم 15

سنقوم باضافة الخاصيه كما بالشكل و نكتب WriteOnly و بعد كتابة سطر الخاصيه نضغط Enter نلاحظ أن الاجراء Set فقط هو الذى تم تنفيذه و ذلك لأننا سنقوم بتخزين القيمه و ليس و ليس استرجاعها لأن WriteOnly عباره كتابة فقط .
ماذا سنكتب ؟؟
سنكتب قيمة Value المتغير الذى تم تعريفة بالخاصيه و لكن من أين سيأخذ هذه القيمه ... انظر الصورة رقم 16
صورة رقم 16

حيث قمنا باضافة Button3 للـ Form و فى الحدث Button3_Click نكتب الكود الموضح بالصورة و هو كود اعطاء قيمة لــ Value لتخزينها عن طريق الكود بالصورة و للتأكد من أن القيمه بالكود Welcome تم تخزينها بالمتغير Value سنتوجه الى الخاصيه AX و بعد سطر Set سنكتب الكود
MsgBox (Value)
سنقوم بتنفيذ الكود عن طريق الضغط على Button3 نلاحظ رساله Welcome و التى تعنى أن القيمه تم تخزينها فى النهايه فى المتغير Value .

Visual Basic Courses - Share