الخميس، 6 مايو 2010

Code of the Week:Random Choice

السلام عليكم ورحمة الله وبركاته وبعد

 

سلسلة جديدة أبداها من هذه المقالة

هذه السلسلة ستكون باذن الله اسبوعية وستكون بنهاية الاسبوع –غالبا الخميس-

سأقوم باختيار فكرة معينة وسأقوم بكتابة الكود اللازم للقيام بهذه المهمة او الفكرة

1-Random Choice

كثيرة هي المرات التي نرغب فيها بعمل برنامج يقوم بعمل قرعة لارقام لاسماء أو حتى لصور

الفكرة بسيطة جديدة وكل ماتحتاج اليها للقيام بذلك هو مؤقت أو Timer

سنقوم بأخذ مثالين لهذه الفكرة

مثال 1: في هذا المثال طلب منا ان نقوم بانشاء برنامج يقوم باجراء قرعة للحضور الذين وزعت عليهم ارقام من 1 – 1000 وعلى البرنامج ان يختار من هذه الارقام

سنقوم بتصميم واجهة المستخدم مستخدمين 3 أدوات فقط

Label>>>>>lblLuckyNumber

Button>>>>>btnChoose

Timer>>>>>tmrLuckyGuest

 

لمن يتسائل عن طريقتي في تسمية الادوات فساقوم بشرح الفكرة لاحقا في موضوع مخصص لذلك ولكن اعلم انها هي الطريقة الرسمية لتسمية الادوات وهي ماتسمى بـــHungarian Notation

 

هذه هي واجهة المستخدم

image

الان سنقوم بالجزء المفضل الا وهو كتابة الكود ولكن قبل كتابة الكود سنقوم ببعض التغييرات للاداة tmrLuckyGuest

قم بتغيير الخاصية interval ألى 50 وهنا الرقم يحدد سرعة القرعة حيث اننا نريد عرض الارقام عند اجراء القرعة وهي تتغير بشكل سريع فالسرعة هنا نحددها من خلال هذه الخاصية

نقوم بتغيير الخاصية Enabled الى False وهذه نقطة مهمة جدا حيث انها تقوم بايقاف المؤقت حتى يتم تشغيله بواسطتنا او بواسطة المستخدم

 

ملاحظة قد تجد هذه الخصائص هي نفسها اي لاتحتاج الى تغيير ولكن لمن يريد ان يتلاعب بها للحصول على نتائج مختلفة

اذن المفترض ان يكون نافذة الخصائص كالاتي بالنسبة للمؤقت

image

 

انتهينا الان من الخصائص والان الى الاكواد

انقر نقرة مزدوجة على المؤقت لتنقلك الى صفحة الاكواد

هذا هو الكود الذي سنقوم بكتابته

 

image

سنقوم بشرح الكود

في الحدث الاول الخاص بالزر عند النقر Click قمنا بكتابة الاتي

tmrLuckyGuest.Enabled = True
       i = 0

وهذا يعني تشغيل المؤقت للقيام باختيار الرقم العشوائي

واسندنا القيمة 0 للمتغير i وستعرف فائدته لاحقا

قمنا بتعريف المتغيرين m,i لما لهم من اهمية في اجراء القرعة

ناتي الان لكود المؤقت وهو اهم جزء في الموضوع

هذا هو الكود

Private Sub tmrLuckyGuest_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrLuckyGuest.Tick
    i += 1
    Dim si As New Random
    lblLuckyNumber.Text = si.Next(1, 40)
    If i = 80 Then
        tmrLuckyGuest.Enabled = False
    End If
End Sub

في السطر الاول قمنا باضافة 1 الى قيمة المتغير i

في السطر الثاني قمنا بتعريف المتغير الخاص بعملية القرعة وهو كما تلاحظ من النوع Random الذي يقوم باختيار الارقام العشوائية (انتبه الى كلمة NEW فهي اهم من الكود كاملا))

ثم بعد ذلك قمنا بجعل البرنامج يضع الرقم العشوائي الذي اختاره باستخدام الطريقة

si.next(1,40) الى lblLuckNumber

الى هنا اكتمل الموضوع ولكن لاحظ اننا هنا قمنا فقط باختيار رقم عشوائي ووضعه في مربع النص ولكن لحظة

كيف نقوم بجعل مربع النص يعرض جميع الارقام بصورة سريعة حتى يستقر على رقم معين بعد فترة معينة

هنا ياتي دور المتغير i

لاحظ في كود الزر اسندنا له القيمة 0 حتى نجعله في نقطة البداية

وفي كل مرة ينفذ حدث المؤقت يتم زيادة القيمة بمقدار 1

اذن حدث المؤقت لن يحدث مرة واحدة وانما سيحدث عدة مرات حتى نوقفه باستخدام الخاصية Enabled ونحوله الى False اذن هو سيقوم باختيار رقم عشوائي ووضعه كل مرة في مربع النص وقد يستمر الى ما لانهاية ولكنا نريده لمدة معينة فلذلك اضفنا كود التحقق من عدد المرات وهي 80 مرة مثلا ويمكنك تغييره باي عدد من المرات تريده بحسب ماتريد

    If i = 80 Then
        tmrLuckyGuest.Enabled = False
    End If

اذن سينفذ حدث المؤقت كل 50 جزء من الثانية ل80 مرة ثم سيتوقف وعندما يتوقف سيعرض اخر رقم اختاره

 

اذن كان هذا هو كود الاسبوع

نستعرض واياكم فكرة المثال الثاني ونؤجل الكود الخاص به الى الاسبوع القادم

2-طلب منا تصميم برنامج لعمل قرعة للفائزين في احدى المسابقات بحيث يقوم بعرض قرعة باسمائهم ويختار اسما معينا

كيف نقوم بذلك

 

نترك الجواب للاسبوع القادم

 

 

تحياتي

ليست هناك تعليقات:

إرسال تعليق