تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] ربط Enum بـ ComboBox واستخدامها بالطريقة الصحيحة
#1
Lightbulb 
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته

المثال بلغة C#

تقديم:
ال Enum كما تعلمون اخواني الكرام هو عبارة عن مجموعة من الثوابت المسماه ، التي تأخذ قيم رقمية تعبر عن هذه الثوابت ، 

كتعبير عن الحالة مثلا اذا اردنا تخزين حالة الموظف  (  1 = نشط ، 0 = غير نشط ، 2 = مفصول ) مثلا ، فبدلا من كتابة الارقام دون ان تحمل معني نقوم بتعريف Enum به هذه القيم الثابته مسماه حتى يكون استخدامها ذو معنى :


كود :
Enum EmployeeState
   Active = 1
   disactive = 0
   fired = 2
End Enum

الان لسنا مضطرين للقلق حول القيم الرقمية لكل حالة ، بدلا من ذلك نكتب سطر له معنى :

كود :
        employee.State = EmployeeState.Active

هذا مجرد تقديم ولتفاصيل اكثر عن الموضوع هذا موضوع وافي وكافي عن ال Enums للاستاذ سيلفر لايت بارك الله فيه


تقديم عن الـ ComboBox:


في البداية يجب ان اشير الى نقطة هامة ،

ال ComboBox شأنها شأن ادوات المجموعات ( ان صح التعبير ) كالـ ListBox  و CheckedListbox تقبل عناضر من اي نوع ، وليس نوع نصي String فقط ، في الحقيقة يمكنك اضافة عناصر للComboBox من كلاساتك الخاصة اذا اردت او من الانواع المعرفة مسبقا ، كل ما في الامر انه يجب عليك تحديد الخاصية في هذا النوع التي ستظهر للمستخدم في عناصر الكومبو بوكس DisplayMember والا يقوم هو بعرض ToString من هذه العناصر افتراضيا ، ولكن العناصر بانوعها لازالت موجودة 

بمعني اذا اضفت لل ComboBox عناصر من نوع Employee مثلا ، وقت بتحديد الخاصية DisplayMember الى "EmployeeName" فانه سيقوم بعرض للمستخدم اسماء الموظفين للعرض فقط ، ولكن كائن الموظف بكامل خصائصه مازال موجود ويمكن استدعائه بشكل طبيعي باستخدام DirectCast



استخدام Enum مع ComboBox:

في مثالنا سأقوم بتعريف Enum لفصول السنة الاربعة :

كود :
   Public Enum Season
       winter
       spring
       summer
       fall
   End Enum


طيب جميل جدا ، الان ماذا نفعل اذا اردنا ربط ال Enum ب ComboBox ،لنمكن المستخدم من اختيار اخد ثوابت ال Enum ، اي احد فصول السنة ، تبدو كفكرة منطقية اليس كذلك ؟


 
نريد الحصول على كل عناصر ال Enum في Array مثلا لاضافتها لل ComboBox عن طريق الخاصية DataSource 

هذه هي وظيفة الطريقة GetValues في الفئة Enum ، تقبل  معامل من نوع Type يمثل ال Enum المطلوب ايجاد Array العناصر له 

نستخدمها كالتالي : في حدث Load :


كود :
       comboBox1.DataSource = [Enum].GetValues(GetType(Season))


ممتاز الان لدينا كل عناصر ال Enum في ال ComboBox ،

يمكننا الحصول على العنصر المختار من نوع Season عن طريقة ال Casting 

مثلا في حدث تغير العنصر المختار comboBox1_SelectedIndexChanged سأقوم بالحصول على الفصل المختار وتغير الخلفية بناء على ذلك :

كود :
   Private Sub comboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles comboBox1.SelectedIndexChanged
       Dim cmb As ComboBox = sender
       Dim season As Season = cmb.SelectedItem

       Select Case season
           Case Season.winter
               BackColor = Color.LightSkyBlue
           Case Season.spring
               BackColor = Color.LightGreen
           Case Season.summer
               BackColor = Color.LightCoral
           Case Season.fall
               BackColor = Color.LightYellow
           Case Else
       End Select
   End Sub


يمكن تطبيق هذه الطريقة على Enum معرفة بالفعل مثلا FormBorderStyle التى تحدد شكل الفورم :

في حدث Load :

كود :
       comboBox2.DataSource = [Enum].GetValues(GetType(FormBorderStyle))


الان في حدث comboBox2_SelectedIndexChanged :

 
كود :
   Private Sub comboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles comboBox2.SelectedIndexChanged
       Dim combo As ComboBox = sender
       Dim BorderStyle As FormBorderStyle = combo.SelectedItem

       Me.FormBorderStyle = BorderStyle
   End Sub


   


الملفات المرفقة
.zip   EnumComboBoxVB.zip (الحجم : 49.12 ك ب / التحميلات : 26)
الرد



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم