منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : حساب عدد الشيك بكس
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم 
اخواني اريد كلما اقوم بالتشييك على اي تشك بكس يظهر بالتاكست بكس 1 مجموع التشيك بوكس المشيك عليها 
بارك الله فيكم
وعليكم السلام ورحمة الله وبركاته

إما الحل العادي :
كود :
Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles _
                                       CheckBox1.CheckedChanged, CheckBox2.CheckedChanged,
                                       CheckBox3.CheckedChanged, CheckBox4.CheckedChanged,
                                       CheckBox5.CheckedChanged, CheckBox6.CheckedChanged,
                                       CheckBox7.CheckedChanged, CheckBox8.CheckedChanged,
                                       CheckBox9.CheckedChanged, CheckBox10.CheckedChanged
   Dim Ce1 As Int16 = 0
   For Each ctrl As Control In Me.Controls
       If TypeOf ctrl Is CheckBox Then
           If CType(ctrl, CheckBox).Checked = True Then Ce1 += 1
       End If

   Next

   TextBox1.Text = Ce1.ToString

End Sub


أو بحسب (Linq) :

كود :
Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles _
                                       CheckBox1.CheckedChanged, CheckBox2.CheckedChanged,
                                       CheckBox3.CheckedChanged, CheckBox4.CheckedChanged,
                                       CheckBox5.CheckedChanged, CheckBox6.CheckedChanged,
                                       CheckBox7.CheckedChanged, CheckBox8.CheckedChanged,
                                       CheckBox9.CheckedChanged, CheckBox10.CheckedChanged

   TextBox1.Text = (From cb In Controls.OfType(Of CheckBox)()
                       Where cb.Checked
                       Order By cb.Text
                       Select cb.Checked).Count

End Sub
شكرا جزيلا أخ طه ربنا يبارك فيك و يحفظك و يسعدك ان شاء الله .فقط أخ طه اعذرني ان لم أكتب ملاحظة أنه عندي مجموعة اخرى من التشك بكس على الفورم ولا اريدها ان تددخل في الحساب . هل من الممكن ان اتجنب عبارة for each control لانها الكود سوف يحتسبلي كل التشكات بكس يلي على الفورم يعني ممكن بعد اذنك احسب بطريقة اخرى و بارك الله فيك
تخيل أن هناك اختراع اسمه الـ (GroupBox) ضع واحدة على النافذة واجعل اسمها مثلاً (GroupBox1) واسحب ما تريد التنفيذ عليها من ال(CheckBox) ضمنها

ثم عدل الكود بحيث يصبح : 

كود :
For Each ctrl As Control In Me.GroupBox1.Controls
الطريقة لا تنفع اخي طه لاني ساوزعهم على مناطق كثيرة على صورة الخريطة و مع ذلك بارك الله فيك و جزاك خيرا و رزقك من حيث لا تحتسب ما قصرت
طريقة ثانية  لكود الأخ(Taha Okla)
PHP كود :
Public Class Form1

    Private Sub CheckBox1_CheckedChanged
(ByVal sender As ObjectByVal e As EventArgsHandles _
                                            CheckBox1
.CheckedChangedCheckBox2.CheckedChanged,
 
                                           CheckBox3.CheckedChangedCheckBox4.CheckedChanged,
 
                                           CheckBox5.CheckedChanged

        Dim checks
() As CheckBox = {CheckBox1CheckBox2CheckBox3CheckBox4CheckBox5}

 
       TextBox1.Text = (From cb In checks
                    Where cb
.Checked
                    Order By cb
.Text
                    Select cb
.Checked).Count
    End Sub

    Private Sub CheckBox6_CheckedChanged
(ByVal sender As ObjectByVal e As EventArgsHandles _
                                            CheckBox6
.CheckedChangedCheckBox7.CheckedChanged,
 
                                           CheckBox8.CheckedChangedCheckBox9.CheckedChanged,
 
                                           CheckBox10.CheckedChanged

        Dim checks
() As CheckBox = {CheckBox6CheckBox7CheckBox8CheckBox9CheckBox10}

 
       TextBox2.Text = (From cb In checks
                    Where cb
.Checked
                    Order By cb
.Text
                    Select cb
.Checked).Count
    End Sub

End 
Class 
بالرغم من أن طريقة الأخ (Zuhare )  هي الأبسط والأفضل،،

ولكن يمكنك التعديل على الكود السابق بحيث :
لو أن ما تريد العمل عليه تعيد تسميته بإضافة رمز ما (g) مثلا  فيصبح(gCheckBox) لكل واحدة منها،
فيصبح الكود :

كود :
Private Sub gCheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles _
               gCheckBox1.CheckedChanged, gCheckBox2.CheckedChanged,
               gCheckBox3.CheckedChanged, gCheckBox4.CheckedChanged,
               gCheckBox5.CheckedChanged, gCheckBox6.CheckedChanged,
               gCheckBox7.CheckedChanged, gCheckBox8.CheckedChanged,
               gCheckBox9.CheckedChanged, gCheckBox10.CheckedChanged

   TextBox1.Text = (From cb In Controls.OfType(Of CheckBox)()
                       Where cb.Checked And cb.Name.Contains("gCheckBox")
                       Order By cb.Text
                       Select cb.Checked).Count

End Sub

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