09-09-20, 03:02 PM
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
المثال بلغة C#
تقديم:
ال Enum كما تعلمون اخواني الكرام هو عبارة عن مجموعة من الثوابت المسماه ، التي تأخذ قيم رقمية تعبر عن هذه الثوابت ،
كتعبير عن الحالة مثلا اذا اردنا تخزين حالة الموظف ( 1 = نشط ، 0 = غير نشط ، 2 = مفصول ) مثلا ، فبدلا من كتابة الارقام دون ان تحمل معني نقوم بتعريف Enum به هذه القيم الثابته مسماه حتى يكون استخدامها ذو معنى :
الان لسنا مضطرين للقلق حول القيم الرقمية لكل حالة ، بدلا من ذلك نكتب سطر له معنى :
هذا مجرد تقديم ولتفاصيل اكثر عن الموضوع هذا موضوع وافي وكافي عن ال Enums للاستاذ سيلفر لايت بارك الله فيه
تقديم عن الـ ComboBox:
في البداية يجب ان اشير الى نقطة هامة ،
ال ComboBox شأنها شأن ادوات المجموعات ( ان صح التعبير ) كالـ ListBox و CheckedListbox تقبل عناضر من اي نوع ، وليس نوع نصي String فقط ، في الحقيقة يمكنك اضافة عناصر للComboBox من كلاساتك الخاصة اذا اردت او من الانواع المعرفة مسبقا ، كل ما في الامر انه يجب عليك تحديد الخاصية في هذا النوع التي ستظهر للمستخدم في عناصر الكومبو بوكس DisplayMember والا يقوم هو بعرض ToString من هذه العناصر افتراضيا ، ولكن العناصر بانوعها لازالت موجودة
بمعني اذا اضفت لل ComboBox عناصر من نوع Employee مثلا ، وقت بتحديد الخاصية DisplayMember الى "EmployeeName" فانه سيقوم بعرض للمستخدم اسماء الموظفين للعرض فقط ، ولكن كائن الموظف بكامل خصائصه مازال موجود ويمكن استدعائه بشكل طبيعي باستخدام DirectCast
استخدام Enum مع ComboBox:
في مثالنا سأقوم بتعريف Enum لفصول السنة الاربعة :
طيب جميل جدا ، الان ماذا نفعل اذا اردنا ربط ال Enum ب ComboBox ،لنمكن المستخدم من اختيار اخد ثوابت ال Enum ، اي احد فصول السنة ، تبدو كفكرة منطقية اليس كذلك ؟
نريد الحصول على كل عناصر ال Enum في Array مثلا لاضافتها لل ComboBox عن طريق الخاصية DataSource
هذه هي وظيفة الطريقة GetValues في الفئة Enum ، تقبل معامل من نوع Type يمثل ال Enum المطلوب ايجاد Array العناصر له
نستخدمها كالتالي : في حدث Load :
ممتاز الان لدينا كل عناصر ال Enum في ال ComboBox ،
يمكننا الحصول على العنصر المختار من نوع Season عن طريقة ال Casting
مثلا في حدث تغير العنصر المختار comboBox1_SelectedIndexChanged سأقوم بالحصول على الفصل المختار وتغير الخلفية بناء على ذلك :
يمكن تطبيق هذه الطريقة على Enum معرفة بالفعل مثلا FormBorderStyle التى تحدد شكل الفورم :
في حدث Load :
الان في حدث comboBox2_SelectedIndexChanged :
[attachment=25636]
السلام عليكم ورحمة الله وبركاته
المثال بلغة 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[attachment=25636]