الجمعة، 19 يوليو 2013

دورة الدوت نت الدرس(10):مدخل الى الفئاتClasses - الجزء الأول


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

 الآن سنتطرق الى أهم مواضيع البرمجة كائنية التوجه OOP وهو موضوع الفئات Classes..
 الفئة(Class): عبارة عن قالب يمكنك بواستطه تشكيل الكائنات التي حددت صفاتها ومن ثم استخدمها..كتشبيه يمكن اعتبارها كقالب الأحذية -أعزكم الله- التي يمكنك بواستطها انشاء حذاء بمواصفات هذا القالب.
                                                                              
 يتم انشاء Class باستخدام الكلمة المحجوزة Class وتنهيه بالعبارة المشهورة End Class
 مثال:
كود:
Class Class****

End Class
كما أسلفنا فان الفئة عبارة عن كائن له خصائصه وظواهره لذلك فان الكلاس يحتوي على أعضاء وظواهر تصفه حركاته
 لنأخذ مثال:
كود:
Class Person
Public **** As String
Public Age As Integer
Public Weight As Double
End Class

 الآن كما ترى فاننا قمنا ببناء فئة جديدة أسميناها Person وأضفنا لها خصائص الاسم والعمر والوزن
 ولكي تستطيع الوصول الى عناصر الفئة فانظر المثال التالي:
كود:
Dim x As New Person
x.**** = "Lo2i"
x.Age = 20
x.Weight = 70
MsgBox("**** is " & x.**** & vbCrLf & "Age: " & Str(x.Age) & vbCrLf & "Weight: " & Str(x.Weight))
كما ترى فاننا قمنا بالاعلان عن متغير جديد من نوع الفئة التي صغنا معالمها وأسندنا لعناصرها قيم جديدة وبعدها استعلمنا عن القيم التي تحملها عناصرها
 والنتيجة:
لعلك انتبهت إلى أن الفئة بتركيبتها البرمجية تشبه كثيرا تركيبة Structure فيمكن صنع فئة من تركيبة Structure باستبدال كلمة Structure بكلمة Class
 راجع: الدرس(4): التركيبات أنواعها واستخداماتها
لكن هناك شيء من الاختلاف بين الفئة والتركيبة Structue
 1)
 الفئة من النوع المرجعي بينما التركيبة Structure من النوع ذات القيمة
 راجع: الدرس(9): الدوال والاجراءات
 2)
 الفئة يمكن أن لا تحتوي على أعضاء بينما التركيبة تصدر رسالة خطأ عند خلوها من العناصر
كود:
Class empty
 No Problems
End Class

كود:

Structure empty
 'Error ****: Error Structure 'empty must contain at least one instance member variable or Event declaration
End Structure
أي ان التركيبة empty يجب أن تحتوي على عضو ابتدائي متغير أو اجراء


3)
 المحدد الافتراضي للفئة هو Private
 بينما المحدد الافتراضي لتركيبة الStructure هو Public

 4)
 يمكننا تطبيق مبدأ الورائة والاشتقاق على الفئات
 بينما التركيبات فلا
 ___________________________
ملاحظة: يمكن للفئة أن تكون متداخلة Nested
 مثال:
كود:

Class Person
   Class ****
      Public First As String
      Public Last As String
   End Class
   Public Age As Integer
End Class


___________________________

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

 كل ما سبق نظرة مبسطة جدا عن الفئات...

 الآن تحدثنا أن الفئة تمثل كائن والكائن له أعضاء إذن الفئة لها أعضاء ويمكن تقسيمها لاربعة مكونات:

الحقول(Fields)
الطرق(Methods)
الخصائص(properties)
الأحداث(Events)

 نبدأ بالحقول:


الحقول Fields
 تعتبر الحقول أصغر وأبسط مكونات الفئة وما هي الا متغيرات عادية.
 مثال:
كود:
Class Person
Dim **** As String   'Field
Dim Age As Integer   'Field
...
...
...
End Class


 كما نرى فان هذه الفئة تحتوى على فئتين أو أكثر وهما **** و Age
 أيضا من مجمل الفروق بين الفئة والتركيبة Structure فان حقول الفئة يكمن اسناد قيم لها وقت كتابة الفئة بخلاف التركيبة Structure
 توضيح:
كود:
Class Person
Dim **** As String = "Mr_MOHAMMED" 'No Problem
Dim Age As Age =18 'No Problem
End Class

كود:
Structure Person
Dim **** As String = "Mr_MOHAMMED" 'Error
Dim Age As Age =18 'Error
End Structure


وبالتطرق لقضية أخرى : بامكانك تعريف حقل داخل الفئة من نوع هذه الفئة وهذا يفيد في خوارزميات المكدسة(LIFO) والطوابير(FIFO)
 مثال:
كود:
Class Person
Dim Im As Person
...
...
End Class



 _____________
 مداخلة بسيطة:
 المكدسة (LIFO) اختصار ل Last In First Out أي آخر ما يدخل أول ما يخرج
 الطابور(FIFO) اختصار ل First In First Out أي أول ما يدخل أول ما يخرج
 _____________

 يمكن للحقول أن تكون على شكل مصفوفات
 مثال:
كود:
Class Person
Dim ****() As String = {"Mr" , "_" , "MOHAMMED"}
End Class
لكن ماذا ان أردت حماية الحقل من تغيير قيمته ..يمكن ذلك باستخدام الكلمة المحجوزة ReadOnly وتعني للقراءة فقط
كود:
Class Person
Public ReadOnly Relegion As String = "Islam and broud"
End Class


وبذلك لن يستطيع المستخدم تغيير قيمة المتغير بعد جعله مقروء فقط
 لحظة...بماذ تختلف ReadOnly عن Const أي ماذا يختلف هذا المتغير المحمي عن الثابت ان لن نقدر على تغيير قيمته
 الاختلاف بينهما أن الثابت يجب عليك اسناد قيمته وقت كتابته أم المتغير المحمي فلك الخيار اما أن تسند قيمته وفت كتابته أو تعطيه قيمته عند أول عملية اسناد ولن يتغير بعدها في ي عملية اسناد أخرى


 الطرق Methods

 الطرق ما هي الا اجراءات ودوال ويمكنك مراجعتها من هذا الفصل:
الدرس(9): الدوال والاجراءات

كيف يمكنني الاستفادة من الطرق:

 1) بوساطة الطرق يمكنك صنع أحداث هذا الكائن
 توضيح:
 الآن نحن البشر نستطيع المشي يمكننا تطبيق ذلك بكل سهولة في عالم البرمجة الكائنية
 لنقم بصنع فئة نسميها انسان ونطبق عليها المبدأ السابق:
 في داخل جسم الفئة Person نضيف اجراء جديد نسميه Walk وداخل هذا الاجراء نحدد كيفية المشي
كود:
Class Person
 Sub walk()      
....
....
....
 End Sub
End Class


 وطريقة استدعاء هذا الاجراء هي كالتالي:
كود:

 Dim Lo2i As Person
Lo2i.Walk()



 وبهذا نكون قد صنعنا متغير من النوع Person أسميناه Lo2i (سامحني يا لؤي بدي اغلبك معي ) وقمنا باستدعاء اجراء المشي الخاص بLo2i ...


 2) مثال رائع وجدته في كتاب الاستاذ تركي العسيري...
 باستخدام الطرق يمكنك اختصار الاسطر والوقت في اسناد القيم لعناصر الفئة
 توضيح:
كود:
Class PersonRecord
        Public **** As String
        Public Age As Integer
        Public Address As String
 End Class


في المثال السابق تم صنع فئة جديدة سميت PersonRecord وتم اضافة بضعة حقول لها **** و Age وAdress ويمكننا اسناد القيم لتلك الحقول بالشكل التالي:
كود:

Dim PersonObject As New PersonRecord


PersonObject.**** = "Turki"
PersonObject.Age = 99
PersonObject.Address = "Suadia"


لكن كيف تفيدنا الطرق باختصار الأسطر والوقت
 دعنا نرجع لذات الفئة, باضافة اجراء داخل الفئة لعملية اسناد القيم الثلاثة:
كود:
Class PersonRecord
        Public **** As String
        Public Age As Integer
        Public Address As String

Sub SetValues(ByVal Person**** As String,ByVal PersonAge As Integer, ByVal PersonAddress  As String)

        **** = Person****
        Age = PersonAge
        Address = PersonAddress
    End Sub

 End Class 


الشرح:
 اضفنا اجراء جديد باسم SetValues ومهمته اسناد القيم للحقول الثلاثة وفي هذا الاجراء نقوم بتمرير ثلاثة وسيطات حسب الحقول المراد استغراقها وبالتالي فان عملية الاسناد اصبحت بالشكل التالي:
كود:

Dim PersonObject As New PersonRecord
PersonObject.SetValues("Turki", 99, "Suadia")




مبدأ إعادة التعريف OverLoading

 من مبادئ البرمجة الكائنية التوجه مبدأ إعادة تعريف الطرق بوسيطات مختلفة وجوبا:
 مثال:
 لدينا الطريقة OverTest سنقيم عليها مبدا إعادة التعريف:
كود:
Sub OverTest()
End Sub

كود:
Sub OverTest(ByVal Var1 As Integer)
End Sub

كود:
Sub OverTest(ByVal Var2 As String(
End Sub


 قد تلاحظ أننا قمنا بتغيير نوع المتغير Var1 في الاجراء الثالث بالرغم من تغيير المتغير وهذا من أسس مبدأ إعادة الوراثة...
 اذ ان الأمر اعادة التعريف التالية تصدر خطأ لاننا بالرغم من تغيير اسم الوسيط لم نغير نوعه ولك التجربة
كود:
Sub OverTest ( ByVal Var1 As Integer(
End Sub
كود:
Sub OverTest ( ByVal Var2 As Integer(
End Sub

معوقات عملية إعادة التعريف

السبب الذي وضحناه بالاعلى..ثبات نوع الوسيط
تغيير نوع الارسال يصدر خطأ:

 المثال التالي يصدر خطأ لتغيير نوع ارسال الوسطيات
كود:
Sub OverTest ( ByVal Var1 As Integer(
End Sub

كود:
OverTest ( ByRef Var2 As Integer(
End Sub


تغيير محدد الوصول أيضا يصدر خطأ

 المثال التالي يصدر خطأ لتغيير محدد الوصول
كود:
Public Sub OverTest ( ByVal Var1 As Integer(
 End Sub
كود:

Private Sub OverTest ( ByRef Var2 As Integer(
 End Sub

في النهاية عند تطبيق مبدأ اعادة التعريف يستحسن استخدام الكلمة المحجوزة OverLoads لتسريع عمل المترجم
 مثال:
كود:
OverLoads Sub OverTest(ByVal Var1 As Integer(
End Sub

كود:
OverLoads Sub OverTest(ByVal Var2 As String(
End Sub

تكمن أهمية مبدأ إعادة التعريف في تسهيل عمل المبرمج :
 المثال التالي سيوضح كيف:
 الآن عندما نطلب من المستخدم ادخال عمره هل نضمن أنه سيدخله حرفيا ام رقميا...بهذا ستضطر لخوارزمية اكثر تعقيدا بدءا بقنص الأخطاء الواردة مرورا بتحويل المدخلات في حال خالفت المطلوب انتهاء بخطأ وارد في حال فشل العمليتين السابقتين..
 لذلك يفيدنا مبدأ إعادة التعريف في تخطي هذا الخطأ كالتالي:
كود:
Class Person

Overloads Sub SetAge(ByVal Age As String(
End Sub

Overloads Sub SetAge(ByVal Age As Integer(
End Sub

End Class


-----------------------------------
 In Form.Load

كود:
Dim Lo2i As New Person
Lo2i.SetAge(19)
Lo2i.SetAge("تسعة عشر")

 الآن في حال ادخال المستخدم قيمة حرفية سيتم التعامل معها وفق الاجراء الاول الذي يستقبل نصا بينما إن أدخل قيمة رقمية سيتم التعامل معها وفق الاجراء الثاني الذي يستقبل رقما بهذا نتخطى احتمالات الوقوع في خطأ من جراء ادخال قيمة غير النوع المحدد

 نكتفي بمبدأ إعادة التعريف حول موضوع الطرق وهناك بعض القضايا الأخرى التي سيتم شرحها باذن الله وقت حاجتنا لها ان شاء الله



 بهذا نكون قد أنهينا درسنا لهذا اليوم وسنتحدث في الدرس  القادم عن الجزء المتبقي من الفئات ان شاء الله

مع تحيات:
Abdalkader Al-badani
انتظروا الدرس القادم

الخميس، 18 يوليو 2013

قصص الانبياء - لوط عليه السلام .


قصص الانبياء من بداية الخلق وحتى خاتم الانبياء ..
لوط عليه السلام

نبذة:

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

سيرته:

حال قوم لوط:

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

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

وزاد الأمر بأن قام الكفرة بالاستهزاء برسالة لوط عليه السلام، فكانوا يقولون: (ائْتِنَا بِعَذَابِ اللَّهِ إِن كُنتَ مِنَ الصَّادِقِينَ). فيئس لوط منهم، ودعا الله أن ينصره ويهلك المفسدين

ذهاب الملائكة لقوم لوط:

خرج الملائكة من عند إبراهيم قاصدين قرية لوط.. بلغوا أسوار سدوم.. وابنة لوط واقفة تملأ وعاءها من مياه النهر.. رفعت وجهها فشاهدتهم.. فسألها أحد الملائكة: يا جارية.. هل من منزل؟

قالت [وهي تذكر قومها]: مكانكم لا تدخلوا حتى أخبر أبي وآتيكم.. أسرعت نحو أبيها فأخبرته. فهرع لوط يجري نحو الغرباء. فلم يكد يراهم حتى (سِيءَ بِهِمْ وَضَاقَ بِهِمْ ذَرْعًا وَقَالَ هَذَا يَوْمٌ عَصِيبٌ) سألهم: من أين جاءوا؟ .. وما هي وجهتهم؟.. فصمتوا عن إجابته. وسألوه أن يضيفهم.. استحى منهم وسار أمامهم قليلا ثم توقف والتفت إليهم يقول: لا أعلم على وجه الأرض أخبث من أهل هذا البلد.

قال كلمته ليصرفهم عن المبيت في القرية، غير أنهم غضوا النظر عن قوله ولم يعلقوا عليه، وعاد يسير معهم ويلوي عنق الحديث ويقسره قسرا ويمضي به إلى أهل القرية - حدثهم أنهم خبثاء.. أنهم يخزون ضيوفهم.. حدثهم أنهم يفسدون في الأرض. وكان الصراع يجري داخله محاولا التوفيق بين أمرين.. صرف ضيوفه عن المبيت في القرية دون إحراجهم، وبغير إخلال بكرم الضيافة.. عبثا حاول إفهامهم والتلميح لهم أن يستمروا في رحلتهم، دون نزول بهذه القرية.

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

(هَؤُلاء بَنَاتِي هُنَّ أَطْهَرُ لَكُمْ).. قال لهم: أمامكم النساء -زوجاتكم- هن أطهر.. فهن يلبين الفطرة السوية.. كما أن الخالق -جلّ في علاه- قد هيّئهن لهذا الأمر.

(فَاتَّقُواْ اللّهَ).. يلمس نفوسهم من جانب التقوى بعد أن لمسها من جانب الفطرة.. اتقوا الله وتذكروا أن الله يسمع ويرى.. ويغضب ويعاقب وأجدر بالعقلاء اتقاء غضبه.

(وَلاَ تُخْزُونِ فِي ضَيْفِي).. هي محاولة يائسة لِلَمْس نخوتهم وتقاليدهم. و ينبغي عليهم إكرام الضيف لا فضحه.

(أَلَيْسَ مِنكُمْ رَجُلٌ رَّشِيدٌ).. أليس فيكم رجل عاقل؟.. إن ما تريدونه -لو تحقق- هو عين الجنون.

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

أحس لوط بضعفه وهو غريب بين القوم.. نازح إليهم من بعيد بغير عشيرة تحميه، ولا أولاد ذكور يدافعون عنه.. دخل لوط غاضبا وأغلق باب بيته.. كان الغرباء الذين استضافهم يجلسون هادئين صامتين.. فدهش لوط من هدوئهم.. وازدادت ضربات القوم على الباب.. وصرخ لوط في لحظة يأس خانق: (قَالَ لَوْ أَنَّ لِي بِكُمْ قُوَّةً أَوْ آوِي إِلَى رُكْنٍ شَدِيدٍ) تمنى أن تكون له قوة تصدهم عن ضيفه.. وتمنى لو كان له ركن شديد يحتمي فيه ويأوي إليه.. غاب عن لوط في شدته وكربته أنه يأوي إلى ركن شديد.. ركن الله الذي لا يتخلى عن أنبيائه وأوليائه.. قالرسول الله صلى الله عليه وسلم، وهو يقرأ هذه الآية: "رحمة الله على لوط.. كان يأوي إلى ركن شديد".


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

التفتت الملائكة إلى لوط وأصدروا إليه أمرهم أن يصحب أهله أثناء الليل ويخرج.. سيسمعون أصواتا مروعة تزلزل الجبال.. لا يلتفت منهم أحد.. كي لا يصيبه ما يصيب القوم.. أي عذاب هذا؟.. هو عذاب من نوع غريب، يكفي لوقوعه بالمرء مجرد النظر إليه.. أفهموه أن امرأته كانت من الغابرين.. امرأته كافرة مثلهم وستلتفت خلفها فيصيبها ما أصابهم.

سأل لوط الملائكة: أينزل الله العذاب بهم الآن.. أنبئوه أن موعدهم مع العذاب هو الصبح.. (أَلَيْسَ الصُّبْحُ بِقَرِيبٍ)؟

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

كان لوط يسمع أصوات مروعة.. وكان يحاذر أن يلتفت خلفه.. نظرت زوجته نحو مصدر الصوت فانتهت.. تهرأ جسدها وتفتت مثل عمود ساقط من الملح.

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

انطوت صفحة قوم لوط.. انمحت مدنهم وأسمائهم من الأرض.. سقطوا من ذاكرة الحياة والأحياء.. وطويت صفحة من صفحات الفساد.. وتوجه لوط إلى إبراهيم.. زار إبراهيم وقص عليهنبأ قومه.. وأدهشه أن إبراهيم كان يعلم.. ومضى لوط في دعوته إلى الله.. مثلما مضى الحليم الأواه المنيب إبراهيم في دعوته إلى الله.. مضى الاثنان ينشران الإسلام في الأرض.


جمع ونشر : محمد دماج .


لمشاهدة القصة بالصوت والصورة ادخل للرايط التالي : 


روزونا في مجموعتكم على الفيس بوك على الرابط التالي :

دورة السي شارب الدرس 9- التعامل مع الأحداث وتنسيقها


دورة السي شارب
الدرس 9- التعامل مع الأحداث وتنسيقها

 السلام عليكم ورحمة الله...

في درسنا اليوم سوف نتعلم كيف نتعامل مع الأحداث والتي تعد من أساسيات أي Control تقوم بإضافته إلى الفورم

أولا : قم بإنشاء مشروع جديد وضع عليه Button فقط...

والان إضغط ضغطا مزدوجا على ال Button واكتب في الحدث Click الخاص به كما تعلمنا سابقا:
MessageBox.Show("MyMessage");
ثم جرب البرنامج حيث سوف يكون عندما تضغط على ال Button يستدعى الحدث Click مما أدى إلى بدء الأمر الذي كتبناه أعلاه..

ولكن أين تم إضافة الأمر إلى حدث وكيف يتم ذلك؟؟؟

الان دعك من ما فعلناه وأكتب تحت الأمر InitializeComponent أي هنا:
كود:
public Form1()
        {
            InitializeComponent();
     هنا
        }          
أكتب: كود:
button1.MouseEnter += new EventHandler(entermousevoid);
ولا تقلق بشأن الخطأ الناتج عن هذا الكود لأن الأمر ليس موجود حاليا...

والان أنشئ الأمر entermousevoid كالتالي:

كود:
private void entermousevoid(object sender, EventArgs e)
        {
            
        }
ولا تقلق بشأن هذه المعطيات فهي إجبارية ويجب عليك أن تكتبها إذا أردت أن تضيف أي حدث كان ولكنها في بعض الأحداث سوف تختلف قليلا كما سترى لاحقا...

واكتب به .
كود:
MessageBox.Show("MyMessage");       
والان قم بتجريب البرنامج وادخل الفأرة على ال Button سوف تلاحظ أن الأمر نفذ!
والسبب أنه قد إستدعى الحدث MouseEnter وعلى ذلك فإن الأمر الذي أنشأناه entermousevoid
قد ربطناه بهاذا الحدث ولذلك تم تنفيذه عند إستدعاء الحدث...

هناك الكثير من الأحداث سوف أشرح وقت تنفيذ بعض منها...

MouseMove : يتنفذ عند تحريك الفأرة فوق ال Control المضاف إليه الأمر على حدثه
MouseDown : يتنفذ عندما يتم ضغط أي زر من الماوس
MouseUp : يتنفذ عندما يتم تحرير كبسة الماوس
KeyDown : عند ضغط أي زر كان
MouseWhile: عند ضغط أو تحريك دولاب الفأرة
MouseLeave : عند خروج الفأرة عن ال Control
LostFocus : عندما يخسر التركيز
GotFocus : عندما يستلم التركيز
KeyUp : عند تحرير أي زر من الكيبورد
FontChanged: عند تغيير الخط
ForeColorChanged : عند تغيير اللون الأمامي
DoubleClick : عند الضغط المزدوج
Resize : عند إعادة التحجيم
Paint : عند رسم الأداة
VisibleChanged : إذا تغيرت خاصية Visible للإداة


هذه أهم الأحداث على ما أظن ويمكنك إستكشاف باقي الأحداث يدويا ...

لتوفير وتسهيل كتابة الأمور لكل أمر نضيفه إلى حدث عند كتابة الإضافة إفعل ما يلي:

button1.Click +=
ثم إضغط على زر Tab مرتين حيث سوف يتم إضافة الأمر مع لب parameters المناسبة تلقائيا...

مثلا MouseLeave
كود:
public Form1()
        {
            InitializeComponent();
            button1.MouseLeave += new EventHandler(button1_MouseLeave);
        }

        void button1_MouseLeave(object sender, EventArgs e)
        {
            throw new NotImplementedException();
        }
إحذف السطر الذي يتم كتابته تلقائيا والذي هو:
 كود:
throw new NotImplementedException();
وكتب الأمر كما يحلو لك


أظن أنه أصبح لديك معلومات جيدة عن الأحداث

ولكي تعلم أين يتم إضافة الحدث button1_Click عند الضغط المزدوج عليه من solution explorer إضغط على الفورم التي تحوي الأداة ومن قائمتها المسندلة إدخل على ال
Form1.Designer ومن هنا سوف تجد كل شيئ عن ذلك
مع تحياتي:abdalkader Al-badani
إلى اللقاء في الدرس القادم إن شاء الله ...