السلام عليكم
انتهينا في الفقرة السابقة من كتابة برنامج بسيط يتيح لنا اجراء قرعة لعدة ارقام ويظهر الرقم الذي اختاره ويعرضها على الشاشة
ثم توقفنا عند السؤال التالي
2-طلب منا تصميم برنامج لعمل قرعة للفائزين في احدى المسابقات بحيث يقوم بعرض قرعة باسمائهم ويختار اسما معينا
كيف نقوم بذلك؟
هنا الجواب باذن الله تعالى
قم بتشغيل المشروع السابق وقم باضافة فورم جديد ولنقم بتسميته frmWinners
هذه هي الادوات التي نحتاج اليها بالاضافة الى اداة المؤقت او Timer
Label>>>>>lblWinner
Button>>>>>btnChoose
Timer>>>>>tmrLuckyGuest
Textbox>>>>txtMyChoose
combobox>>>>>cboWinners
سنعرف فائدة كل من مربع النص ومربع القائمة لاحقا
اما الان فهناك حلان
اما ان يكون مربع النص ومربع القائمة خلف الزر او ان يكونا في اي مكان وتكون الخاصية
visible=false
وذلك لاننا لانريد اظهارها للمستخدم
وبالتالي هذا الشكل النهائي
نفترض ان الاسماء عندك جاهزة وكل ماعلى المستخدم القيام به هو اجراء القرعة
اذن هذا ماسنقوم به
1-قم بادخال الاسماء في مربع القائمة مستخدما الخاصية Items
2-سنقوم الان بادخال الكود اللازم طبعا خصائص المؤقت مثل المشروع السابق
الان سنقوم بالجزء المفضل الا وهو كتابة الكود ولكن قبل كتابة الكود سنقوم ببعض التغييرات للاداة tmrLuckyGuest
قم بتغيير الخاصية interval ألى 50 وهنا الرقم يحدد سرعة القرعة حيث اننا نريد عرض الارقام عند اجراء القرعة وهي تتغير بشكل سريع فالسرعة هنا نحددها من خلال هذه الخاصية
نقوم بتغيير الخاصية Enabled الى False وهذه نقطة مهمة جدا حيث انها تقوم بايقاف المؤقت حتى يتم تشغيله بواسطتنا او بواسطة المستخدم
نقوم بادخال الكود الخاص بالزر
Timer1.Enabled = True
i = 0
نفس المثال السابق ولا يحتاج الى شرح
نقوم الان بادخال كود المؤقت
Dim m As Boolean = False
Dim i As Integer = 0
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
i += 1
Dim s As Integer
Dim si As New Random
s = si.Next(0, ComboBox1.Items.Count - 1)
Label1.Text = ComboBox1.Items(s)
If i = 80 Then
Try
Label1.Text = ComboBox1.Items(s)
Catch ex As Exception
End Try
Timer1.Enabled = False
End If
End Sub
لاحظ باننا في هذا المثال اضفنا متغير جديد من نوع boolean وذلك لسبب سأقوم بتوضيحه لاحقا
وعرفنا المتغير من نوع integer تماما مثل المشرو السابق
في حدث المؤقت
تقريبا مثل المشروع السابق حيث اضفنا القيمة 1 الى المتغير i في اشارة الى عدد المرات التي تم تنفيذ الكود
وهنا الجديد قمنا بتعريف متغير s من نوع integer حتى يتنسى لنا استخدامه في مربع القائمة
قمنا بتعريف متغير من نوع random حتى يقوم باختيار رقم عشوائي مثل المشروع السابقة
وهنا قمنا باسناد الرقم العشوائي الى المتغير s مع ملاحظة مايلي
قمنا بتحديد اصغر رقم 0 واكبر رقم ComboBox1.Items.Count – 1
ولكن لماذا
الفكرة هنا باننا سنقوم باختيار رقم عشوائي يمثل عدد الفائزين وعدد الفائزين حقيقة هو عدد العناصر الموجودة في مربع القائمة وجيث ان اول عنصر في القائمة يمثل بالرقم 0 وليس 1 فاذن يفترض بان يكون اكبر قيمة هي عدد العناصر-1 لاننا سنقوم باستخدام هذا الرقم في جلب العنصر من مربع القائمة
لاننا لو افترضنا ان عدد الفائزين 5 وقمنا بجعل اكبر قيمة ComboBox1.Items.Count اي 5 ومن ثم قمنا باستدعاء العنصر رقم 5 من مربع القائمة سيحدث خطا ولن يعمل البرنامج لماذا؟
لان العنصر 5 غير موجودين لان الموجود فقط
0
1
2
3
4
نعود للكود وعرفنا السر في اختيار اكبر واصغر قيمة للرقم العشوائي
طبعا مثل المشروع السابق في كل مرة نقوم باضهار العنصر في Label حتى تظهر تاثير القرعة
Label1.Text = ComboBox1.Items(s)
وفي الاخير عند الوصول لعدد المرات المطلوب نضع نفس الكود السابق حتى يتوقف عن الاكمال ونوقف عمل المؤقت بالكود
Timer1.Enabled = False
الى هنا المفترض ان البرنامج كامل ولكن خذ هذا السؤال
لماذا يقوز في القرعة دائما احد المقربين لاصحاب الجائزة؟او بمعنى اخر كيف ممكن اخلي القرعة لصالحي بحيث اني انا احدد الفائظ مسبقا بحيث انه فقط اظهر لهم تاثير القرعة بينما المسابقة محسومة مسبقا والفائز معروف مسبقا
هنا ياتي دور مربع النص
حيث يمكننا تعديل الكود قليلا ليتماشى مع رغباتنا
قم باضافة حدث doubleclick للفورم وقم باضافة الكود التالي
TextBox1.Text = InputBox("")
في هذا الكود نقوم باظهار inputbox يقوم بالسؤال عن قيمة مربع النص
سنفترض في هذا المثال باننا سندخل رقم العنصر للفائز الموجود في مربع القائمة
الان كود المؤقت كما هو ولكن عند انتهاء تاثير القرعة –في داخل التعليمة if then- لانجعلها نفس ماقبلها
Label1.Text = ComboBox1.Items(s)
وانما في المقابل نقوم بتغيير القيمة s الى مربع النص فتصبح كالتالي
Label1.Text = ComboBox1.Items(Val(CInt(TextBox1.Text)) - 1)
ممتاز اذن عرفنا السر الان كيف يمكن تزوير القرعة
تحياتي