Search VB 2010

Showing posts with label OOP. Show all posts
Showing posts with label OOP. Show all posts

Sunday, December 15, 2013

Visual Basic Compare Two Treeviews and return differences

Visual Basic 2010 - Compare Two Strings and return differences and matches

vb2010 compare strings and return differences
VB2010 Compare Strings in Collections

Collections as an Alternative to Arrays

Visual Studio 2010
Although collections are most often used for working with the Object Data Type, you can use a collection to work with any data type. In some circumstances, it can be more efficient to store items in a collection than in an array.

If you need to change the size of an array, you must use the ReDim Statement (Visual Basic). When you do this, Visual Basic creates a new array and releases the previous array for disposal. This takes execution time. Therefore, if the number of items you are working with changes frequently, or you cannot predict the maximum number of items you need, you might obtain better performance using a collection.

A collection, which does not have to create a new object or copy existing elements, can handle resizing in less execution time than an array, which has to use ReDim. But if the size does not change, or changes only rarely, an array is likely to be more efficient. As always, performance is highly dependent on the individual application. It is often worth your time to try both an array and a collection.

This Example

How to compare two Treeviews in VB2010
How to return the differences between two Treeviews


- Create Visual Basic 2010 Windows Application Project
- On Form1, place two tree views and two textboxes and one button

Visual Basic Online Course
Visual Basic 2010 Compare Strings from Treeview
How does it work ?
- Store the Treeview1 [TRV1] nodes into Textbox, and the same with Treeview2 [TRV2]
- How many strings [Lines] in each Textbox

  • We want to find where both Textboxes is different and where both Textboxes is match to one another. For example, differences are :
- TRV1 has an extra string [Southern American]
- TRV2 node string [Africa] is different from TRV2 node string [African]

Steps to accomplish this task :

Download example from Mediafire
Extended work :
You can easily extract any Database tables, columns Schema into a treeview control, and you can also using this example compare two tables or two columns in a Database using this example as well.

You can use ListViews or ComboBoxes or ListBoxes instead of the Treeview control, I used the treeview control because it's always tricky to work with. Using other controls that store strings in Collection format would be so easy, even much easier than using Treeviews.

Another Treeview Examples

Expand and Collapse two treeviews at the same time according to one another even if they both don't have the same nodes names. Expand TreeView1[TRV1] node when TreeView2 [TRV2] node is expanded or collapsed.

TreeView Example : Change the node font

TreeView Example : Add a photo (icon) to the TreeView
1) Add ImageList from the ToolBox
2) Add 2 photos to the ImageList1 [From properties, Collection], for example :
- Photo1.Png (Index by default is Zero 0), this will be the Parent icon
- Photo2.Png (Index by default is One 1), this will be the first child icon
3) Code to display image/Icon in the Tree View :

Here are some online Visual Basic lessons and courses :

Monday, July 01, 2013

Visual Basic Online Course OOP Classes

Visual Basic Application Development
Object Oriented Programming 


After creating so much applications and working with Databases, I was always afraid of getting close to OOP (Object Oriented Programming). OOP is the essence of Programming languages, understanding OOP is a sign which tells you "You are a talented programmer". 

We all know that there is a difference between programming practitioner and freelancer programmer, some say that practitioners are much secure, they don't need to learn more to get paid because they already have a job, but a freelancer is a guy who is talented in something (In this example : Programming) and in addition he/she wants to make something out of it.
VB 2010 OOP
VB 2010 OOP
OOP or Object Oriented Programming, means programming the programming, Yes! Before studying OOP we used to write codes and place tools, then hoke them up together to come up with something magnificent for ourselves or for our clients for money or some school degrees as a project.

No client will ever ask you to create a programming tool for him, or to modify a built-in tool for him, unless he is another programmer trying to sell something over the internet, if you ever worked in a freelance agency such as for example, or those and others are major hiring websites for freelancers, not just in programming field but in so much things.

Each and every desktop application written and designed in Visual Basic .Net includes for most of us, basic interfaces : The form, the controls on the form, coding the controls, packing all above, to come up in the end with an application, well this is not exactly how it works in OOP programming.

In OOP programming you create your own everything from scratch to start using it in your form or coding controls on the form or creating controls (TextBoxes, Labels, ..... etc.) for yourself for later work. OOP is written within a Class.

Since .Net Framework started, and almost everything in Visual Basic became a separate Class of its own. Notice when you open the form to write a code, the first line says (Public Class Form1) then in the end (End Class).

A Class is the mother and the father of each and single object in Visual Basic .Net, everything you see in Visual Basic .Net came from a Class. To create a Class, you need to need to create a Class, I'm not kidding, I mean it, if you want to create a Class in your project then you must need one unless it won't make any sense, since logic is key stone and the only motivation for programmers to start designing coding, and Classes is one of those jobs as designing and coding then logic (The need for creating a Class) must be present in order to succeed and make sense.

VB 2010 OOP
VB 2010 OOP

When do we need to create a Class for our Visual Basic .Net Project ?

If you are trying to create your own Textbox or label, or if you are generally trying to create your own Visual Basic .Net Control, then you are definitely in need for a Class, as a result, you need to know OOP.

If you developed a method with a 3rd party for example, and you need to always include this method in further applications, then you need to create a Class for yourself, and also as a result you will have to learn and read about OOP.

Last thing, the basic thing to need to create a Class is when you are trying to contain your code blocks into a container for further development, then you need a Class.

VB 2010 OOP
VB 2010 OOP
Yes, all we need now is an example of a Class to start working. See you next chapter.

Here are some online Visual Basic lessons and courses :

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) للمساعده .

Sunday, April 17, 2011

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
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 .

Thursday, April 14, 2011

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

تعرفنا على الاجراء و الداله و الفرق ينهما, الموديول و الكلاس موديول و الفرق بينهما .

كما فى المثال السابق : قم بانشاء Sub جديد و لكن بنفس اسم الـ Constructor فى الـ Class2
Sub New ()"C:\test.txt")
أى من الاجرائين سيقوم المشروع بتنفيذه أولا ؟؟؟
سيقوم بتنفيذ الاجراء الاول أى انه فى حالة أكثر من Constructor يقوم المشروع بتنفيذ الــ Constructor المشار اليه أولا ..
نتوجه الى Button2_Click فى المشروع السابق و نكتب :
Dim C As New Class1
هذا الكود سيقوم بتنفيذ الاجراء الثانى لأن الكلاس الاول مبنى على متغيرات .
الان عند تنفيذ الكود فإنه سيقوم بانشاء File فى الــ C اسمه Test و بما أن الكلاس متعلق بالذاكرة العشوائيه فانه من المفروض أو المنطقى ان عندما ينتهى عمل الـ Class فان العمل ينتهى بالذاكرة ايضا .. و هنا يأتى دور الـ Destructor و يكتب بهذا الشكل :
Protected Overrides Sub Finalize ()
MsgBox ("Class Ends Here")
End Sub
و ينفذ هذا الكود قبل الخروج من البرنامج مثل الحدث Dispose أو Close حيث يحذف الـ Class من ذاكرة الكمبيوتر و يطلق عليه Class Unused أو له اسم بالذاكرة لكن لا يوجد متغير (C) يشير اليه لكى يفعل عمله و كود الــ GC.Collect يقوم بحذف اسماء الـ Class من على الذاكرة الغير مستخدمه
C = Nothing
و يصبح شكل المشروع الان كما بالصورة رقم (9) ...
صورة رقم 9

صورة رقم 9
- ما هى المتغيرات المسموح بها فى الـــ Class ؟
فى نفس المشروع السابق اضف Class2 و لاحظ عند كتابة الاكواد التاليه :
Public Class Class2
Public X As Integer
متغير نصى
Public Const Y As Double = 300
ثابت نوعه Double يجب أن يأخذ قيمه وقت تعريفه مباشرة و Y لن تتغير قيمتها طول المشروع و من مميزاته أنه يمكن استدعائة بدون أخذ نسخه من الكلاس فى المنطقة المراد استخدامه فيها (Class2.Y) مباشرة بدون الحاجه الى كتابــــــــة (Dim C As New Class2)
Pubic Shared Z As Integer
هو متغير Read/Write و يختلف مع String أنه يمكن استدعائة عن طريق اسم الكلاس مباشرة دون الحاجه الى حجز نسخه من الـ Class فى الذاكره
Public ReadOnly B As Integer
المتغير B لن يمكن التصريح عن قيمتة فى المشرع 
End Class
الفرق ين كلا من (Const) و (ReadOnly) .....
الاول Cosnt : لا يجب استدعاء الكلاس و لكن يجب ان يأخذ قيمتة فى الـ Constructor أو نفس السطر المعرف فيه عموما .
الثانى ReadOnly : لا يمكن استدعائة الا بعد أخذ نسخه من الـ Class أولا
اذا هذه هى المتغيرات الممكن كتابتها فى الـ Class .
و الان .... ما هو الفرق بين الاجراء Sub والدالة Function ؟؟
- الدالة : تقوم بتنفيذ وظيفه معينة ثم Return للنتيجه بقيمه معينة .
- الاجراء : يقوم تنفيذ الاكواد المكتوبة به فقط .
لاحظ :

لا يمكننا استخدام كلا من الداله و الاجراء الا على مستوى Form1 و لكن لتعميم عملهم على مستوى المشروع يجب نقلهم كما قمنا فى الاجراء الى الموديول ة Module
أو توسيع نطاق عملهم أكثر فأكثر عن طريق اضافتهم الى Class Module ...
و الان .... ما هو افرق بين الموديول Module و الكلاس موديول Class Module ؟؟
- الموديول : عباره عن كلف نضع به الاجراءات و الدوال و الخصائص ..... الخ كى نستطيع الوصل اليها داخل المشروع كله .
- الكلاس موديول : نفس تعريف الموديول و لكن بالاضافه الى انه يمكن استخدام مكونات الــ Class Module خارج المشروع
الحالى فى أى مشروع أخر سنصنعه و ذلك مثل استخدام مكتبة ADO و OLEDB حيث نقوم باستخدام Class مثل
Connection و Adapter فى التوصيل بقاعدة البيانات .
و ايضا يمكن وضع الـ Class فى مكتب لخدمة جميع المشاريع . 

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

Wednesday, April 13, 2011

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

تعرفنا على مفهموم الــ Sub .

C- Sub & Function Concept :
مفهوم الاجراءات و الدوال

صورة رقم (7)

- كيف نصنع الدوال و كيف نستخدمها فى بيئة الــ .Net ؟؟
لكى نجيب على هذا التساؤل سنقوم بشرح مثال عملى ...

- قم بعمل مشروع جديد يحتوى على Form تحتوى على Button ... كما بالصورة رقم 7.
- من داخل الــ Form سنكتب الكود الاتى :
Private Funcrion Sum(ByVal X As Integer,ByVal Y As Integer)
Return X + Y
End Function
معناه أن الدالة Sum نرسل لها قيمتين X,Y ثم عملية جمع و الرجوع بالنتيجه (هذا هو عمل الداله Sum).
لاظهار النتيجه :
فى الحدث Button1_Click نكتب :
MsgBox Sum( 5 + 6 )
قم بتجربة المشروع و لاحظ النتيجه هى 11
بالرجوع للمثال السابق ... نضيف Class جديد للمشروع .
و مره أخرى معنى Class : هو عبارة عن وحده تحتوى على مجموعه من الاجراءات مثل (Sub - Function - Variables - Events - ....... etc) .... و أهم اجرائين فى الـ Class هما : Constructor - Destructor حيث (Constructor) هو بادىء الــ Class بينما (Destructor) هو ناهى الـ Class .... انظر الصورة رقم (8).

صورة رقم (8)

الصورة توضح Class اسمه Ahmed يحتوى على Sub اسمة New1 عباره عن كود واحد و يبدأ الـ Class بهذا الاجراء و بالتالى فان الاجراء New1 هو Constructor للــ Class أى ان عند استدعاء الـ Class فان أول كود سيتم تنفيذه هو الاجراء New1 و فى بعض الاحيان فإن الــ Constructor يستخدم فيه أكواد الحمايه للــ Class أو التعليقات الخاصه بمبرمج الـــ Class حيث أن اجراء Constructor أول ما يتم تنفيذه.
الان سنضيف Button الى الــ Form و عند الحدث Button2_Click سنكتب الاتى :
Dim A As New Ahmed
الان قم بتنفيذ المشروع ستلاحظ تنفيذ هذا الكود الموجود بالاجراء New1 و الذى هو الــ Constructor للـ Class .
ثم نضيف اجراء اخر بعد الاجراء New1 و ليكن New2 كالتالى ....
Sub New2
MsgBox ("Im Just A Sub")
End Sub
ثم فى الحدث Button2_Click نكتب الاتى :
قم بتنفيذ المشروع ستلاحظ أنه قام بتنفيذ الــ Constructor أولا و هو الاجراء New1 ثم قام بتنفيذ الاجراء الثانى New2
- كيف نبنى Class على متغيرات ؟
- قم بعمل مشروع جديد يحتوى على Form تحتوى على Button ... كما بالصورة رقم 7.
- قم باضافة Class باسم Class1 .
- من داخل الــ Class سنكتب الاكود الاتى :
Sub New(ByVal XX As Integer, ByVal YY As Integer)
x = XX
y = YY
End Sub

Public X As Integer
Public Y As Integer
- ما نراه الان هو اجراء باسم New مبنى على متغيران هما XX و YY و كلاهما
اجبارى و كلاهما رقمى , لاحظ انه بعد انتهاء الاجراء بــ End Sub قمنا بتعريف
متغيرين أخرين هما X و Y واعطينا كلا منهما نوع رقمى لأننا سنساويهما بالمتغيرين XX و YY أى انه حتى اذا انتهى الاجراء فى Class فانه يمكن استدعاءة فى نفس الــ Class الموجود به .
- كيف نستفيد بهم فى الــ Form ؟؟
- أولا الاجراء مكتوب فى الــ Class و هذا معناه أنه يؤثر على مستوى المشروع بالكامل .
- سنذهب الى الـ Form و نقوم باستدعاء الـ Class بهذا الكود ...
Dim  C As New Class1(10, 20)
هذا الكود معناه أن C اصبحت تمثل Class1 أى أن ذاكرة الكميوتر عند تنفيذ هذا الكود يتقوم بتخزين C على أنه Class1 أو نسخه جديده منه و سنقوم بالتعويض عن كلا من XX و YY بالرقمين 10 و 20 .
و هذا ايضا معناه أن كلا من XوY مساويان للرقمين 10و20 ...
نذهب للحدث Button1_Click و نكتب الكود :

MsgBox(C.X & " " & C.Y)
نلاحظ ان عند كتابة C التى ترمز الى الـ Class ثم (.) ظهر تلقائيا كلا من XوY و لم يظهر XXوYY لأن ...........
 XXوYY هما متغيرات الاجراء New بينما XوY هما متغيرات الــ Class بالكامل و لذا قمنا بمساواتهم بكلا منXXوYY حتى نخرج بنتيجه من التعويض بالرقمين 10و20 .
قم بتجربة المشروع و غير مكان المتغيرات داخل الـ Class و داخل الـ Sub و داخل الـ Form ولاحظ الفرق حتى تتعرف أكثر على الاجراء ...
- هل يمكن عمل أكثر من Constructor فى الــ Class ؟؟
نعم يمكن عمل أكثر من Constructor و تسمى هذه العمليه OverLoading

Tuesday, April 12, 2011

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

We discussed OOP concepts and started a project called ''Email Validation'' using the built-in-function IndexOf

In addition to the previous project, we will add New Form and we want now to repeat the previous SUB to Validate the Email on the new Form, to do so, we will need to copy the whole code and paste it to the new Form, now what if we wanted to add 20 New Form that require Email Validations for each Form of the 20 ... What would we do then ?! The answer is simple :
We shall use the OOP concepts to work this problem out ....

Creating SUB

We will create SUN [Validate_Email()] so we can validate Email in whole project without the need to copy and paste the same procedure 20 times for each Form.

Sub ValidateEmail ()

صورة رقم (3)
يحتوى هذا الاجراء على نفس الكود المراد تكراره , أى اننا سنقوم بعمل Cut للكود من مكانه و لصقه فالاجراء الجديد و التعويض عن الاكواد باسم الاجراء فقط كما بالصورة رقم 3
قم بتجربة البرنامج ستجد أن نفس النتيجه ظهرت .
الان سنقوم ببعض التغييرات على الـ Sub حيث سنقوم ببناء الـ Sub على متغير و يكون بهذا الشكل .
صوره رقم (4)
 Sub ValidateEmail (ByVal Txt As TextBox)
 الجمله التى بين الاقواس (ByVal Txt as TextBox) تسمى Parameter و سنقوم بتعديل الكود الموجود بالـ Sub حيث سنستبدل الــ Controls من نوع TextBox بالمتغير Txt و ايضا فى الحدث المسؤل عن تنفيذ الــ Sub  سنلاحظ وجود خط أحمر معناه أن الاجراء اصح ناقص (غير صحيح) حيث ينقصه المتغير المبنى عليه Txt و بما أننا نقوم بعمل Validate للــ TextBox2 فاننا سنضع بين الاقواس فى الــ Sub كلمة TextBox2 كما موضح بالصورة رقم 4.
قم بتجربة البرنامج سيعطيك نفس النتيجه .
الان سنقوم بالتعديل مره ثالثه فى الاكواد حيث سنستبدل المتغير Txt من نوع TextBox بالمتغير Txt1 من نوع String بهذا الشكل.
Sub ValidateEmail (ByVal Txt1 As String)
صورة رقم (5)
أى اننا نريد التعويض عن المتغير النصى هذه المره , أى اننا سنعوض عن TextBox2.Text بالكامل فى الاجراء بدلا من TextBox2 و سنقوم بتغيير الكود حيث سنستبدل Txt.Text بالكامل بــ Txt فقط .... كما بالصورة رقم 5 .
مثال أخر لتوضيح عمل الاجراءات Sub
الفرق بين الاجراءات المبنية على متغيرات اجبارية و المبنية على متغيرات اختياريه .
المتغيرات الاجبارية هى التى يجب ان تذكر عند كتابة الاجراء .
المتغيرات الاختياريه يمكن كتابتها و يمكن التغاضى عنها .
سنقوم الان بعمل فورم ثالث Form3 فى نفس المشروع المفتوح EmailValidation و سنقوم بعمل اجراء Test بهذا الشكل
Sub Test (ByVal X As Integer, Optional ByVal Y As Integer = 10)
الاجراء الموضح أمام حضرتك عباره عن عدد (2) Arguements الاول (X) و الثانى (Y) و نوعهم (Integer) أى متغير رقمى .

صورة رقم (6)
المتغير الثانى يحتوى على كلمة Optional و ذلك معناه أنه عندما التعويض عن الاجراء Test فانه من الممكن تجاهل قيمة (Y) حيث أنها اختياريه و لكن ستكون قيمتها دائما 10 اذا تم تجاهلها.
قم بكتابة المثال الموجود بالصورة رقم (6) حيث Form3 بها فقط Button1 و الكود سينفذ من خلال الحدث Button1_Click
ستلاحظ ان الكود يتم تنفيذه على الرغم من عدم كتابة المتغير الاختيارى و لكن لا يعمل بدون الاجبارى X ..
ملحوظة : المتغيرات الاختيارية تكتب فى منطقة الــ Parameters فى النهايه دائما (لا تنسى) مثال :
إجراء صيحيح
Sub Test(ByVal X As Integer , ByVal Y As String , ByVal L As Boolean , Optional ByVal N as Integer)
اجراء خاطىء
Sub Test(ByVal X As Integer , ByVal Y As String , Optional ByVal L As Boolean , ByVal N as Integer)
اجراء خاطىء
Sub Test(Optional ByVal X As Integer , ByVal Y As String , ByVal L As Boolean , ByVal N as Integer)
لاحظ ايضا لم نستخدم Public أو Private .... و ذلك لأننا كنا نعمل على مستوى الفورم فقط و بالتالى استخدامهم غير ضرورى.

Visual Basic Online Course - OOP

Visual Basic Online Course - OOP

Visual Basic 2010 OOP Course
Visual Basic 2010 OOP
OOP Introduction
The original versions of Microsoft® Visual Basic® provided a mechanism for defining data structures in a user-defined type (UDT). A UDT encapsulates the data, but not the processing associated with that data. Processing was defined in global standard modules, often called BAS modules because of their .bas extension.

The release of Visual Basic 4 dawned a new age for Visual Basic developers. Visual Basic took its first steps toward becoming an object-oriented programming (OOP) language by providing object-oriented features such as class modules. 

A class module defines data as properties and the processing associated with that data as methods. By defining a class for each business entity, encapsulating data in properties and processing in methods, Visual Basic developers had object-based development.

As Visual Basic evolved from version 4 to version 6, Visual Basic developers expanded their knowledge of OO 'Object-Oriented' to include component-based development (CBD) techniques. With CBD, Visual Basic developers could build complete three-tiered applications for Microsoft Windows® and the Web. This type of development was so common that Microsoft provided a design pattern known as the Microsoft DNA architecture.

Visual Basic .NET provides another leap in Visual Basic development capabilities and features and provides for true object-oriented programming, as detailed in this article.


For a programming language to be a true OOP language, the language must meet the following criteria:

    Abstraction—Abstraction manages the complexities of a business problem by allowing you to identify a set of objects involved with that business problem.

    Encapsulation—Encapsulation hides the internal implementation of an abstraction within the particular object.

    Polymorphism—Polymorphism provides for multiple implementations of the same method. For example, different objects can have a Save method, each of which perform different processing.

    Inheritance—The excitement of Visual Basic .NET lies in inheritance. Visual Basic 5 introduced the concept of interface inheritance, which allows you to reuse the interface of a class, but not its implementation. Visual Basic .NET provides for true implementation inheritance whereby you can reuse the implementation of a class.

Now let's look at doing object-oriented programming in .NET.

OOP in Visual Basic .NET

Visual Basic .NET is not Visual Basic 6 with inheritance tacked onto it. Rather, Visual Basic .NET has been entirely rewritten to be fully object-oriented. In fact, everything in Visual Basic .NET can be treated as an object. Yes, even your strings and integers can be accessed as objects in Visual Basic .NET ............... Source WikiPedia

1) What's OOP ?
- Objects Oriented Programming
- It's the logic of programming

2) What does it do ?
- It helps the programmer to understand codes "where the code line came from - where is it going?" and enables him to be creative and able to create objects and controls .
3) OOP has 3 major concepts
  1. Inheritance
  2. Polymorphism
  3. Encapsulation
OOP Lesson Index /
  1. Classes Intro .
  2. Classes Studying .
  3. Sub & Function Concepts .(1 - 2)
  4. Property Programming
  5. Overloading - Inheritance
  6. Inheritance & Access Modifiers
  7. Implementations of OOP Concepts
  8. Make Your Own TextBox
1) Classes Intro
Classes are sections of Code but superior to any other code in the Forms ... let's take an example.
- in our example we will try to make an application that makes sure that the TextBox writes only Email format (I.e. : UserName@EmailServerName.Extension), ain't that represents the most common Email format used? ... OK.

Let's start a new Windows Form Application Project from Visual Basic 2010. Our project will aim to notify the user whether an Email format was provided in the TextBox control placed on the form or not. We shall call this project Email-Format-Validation.
  • Project Design [GUI] 
Visual Basic 2010 OOP course
Visual Basic Online Course OOP - Classes
As you can see the Project design is so simple :
Name : Form1
Name : Label1
Text : Name
Name : Label2
Text : E-mail
Name : TxtName
Name : TxtEmail
Name : BtnValid
Text : Validate E-mail
Now, what does it mean (Make sure the user writes E-mail address format correctly or in Email format)??
- Means we want the application to Check the TextBox.Text contents and determines Weather the User wrote (@ and .) in it, because this is what the common Email Address format looks like ,right?!
OK, so we write this block of codes in the Click Event In the BtnValid Control

What did we write ?
We created two variables (X,Y) as Integers, because we shall refer to the place where the (@) is, by using X variable and the and the place where the (.) is, by using Y variable. OK?!

The line where X = TxtEmail.Text.IndexOf("@") means that X = the IndexOf of the text in TxtEmail where IndexOf is a function in VB 2010 comes with the Text Property Of the TextBox Control, and it locates a character's position (Zero based index) within the Text in a TextBox, and it's called a (Built-in Function), OK?
Again, the line of code means (Locate the position of the (@) Character within the property Text in the Control TxtEmail, Please) ...
The line where it says, If X >= 1 Then means, if our user typed (@), then X "The position" must be bigger than or equals to 1 , why not (0) ??? 

Because (Ahmed) = (0 1 2 3 4) [and that is called a Zero based index, Ahmed has 5 elements starting A=0 and ends with D=4] also Emails don't start with (@) so the position (X) must be in the second letter (1) or in later position, so (if the user wrote (@) then checked for the (.) symbol, Y also represents the position of the (.) symbol but (@) can not come after (.), so we must make sure of that, and this is why we repeated IndexOf function, we used another property of the IndexOf Function.
Y = TextBox2.Text.IndexOf(".", X)
Again ... the above line means : Locate the (.) symbol that comes after the (@) .
The line If Y < 1, Then means that if the user wrote the (.) at the first letter Zero position then the application will generate a message box, then End If to end the IF Statement that belongs to locating the @ symbol.
MsgBox ("Invalid E-mail Address")
End If
Else the (@) at the (0) position
MsgBox ("Invalid E-mail Address")
End If 
End checking for (@) Locations it is after the (0) position already .
End Sub
Visual Basic OOP [Classes Intro] Homework :
(1) Please Design this Project On your own and notice how Email forms must be exactly typed as conditioned, and why (-1) shows sometimes !!??

(2) Where to write a message box that tells the user the the Email format is correct ?
Next Lesson - OOP Classes further Look

Here are some online Visual Basic lessons and courses :

Visual Basic Courses - Share