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

المثال بلغة VB

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

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


كود :
        enum EmployeeState
        {
            Active = 1,
            disactive = 0,
            fired = 2
        }

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

كود :
           employee.State = EmployeeState.Active;

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


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


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

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

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



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

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

كود :
       public enum  Season
       {
           winter ,
           spring,
           summer,
           fall
       }


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


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

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

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

كود :
           comboBox1.DataSource = Enum.GetValues(typeof(Season));

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

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

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

كود :
       private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
       {

           ComboBox cmb = (ComboBox)sender;
           Season season = (Season)cmb.SelectedItem;


           switch (season)
           {
               case Season.winter:
                   BackColor = Color.LightSkyBlue;
                   break;
               case Season.spring:
                   BackColor = Color.LightGreen;
                   break;
               case Season.summer:
                   BackColor = Color.LightCoral;
                   break;
               case Season.fall:
                   BackColor = Color.LightYellow;
                   break;
               default:
                   break;
           }

       }

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

في حدث Load :

كود :
           comboBox2.DataSource = Enum.GetValues(typeof(FormBorderStyle));

الان في حدث comboBox2_SelectedIndexChanged :

كود :
       private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
       {
           ComboBox combo = (ComboBox)sender;
           FormBorderStyle borderStyle = (FormBorderStyle)combo.SelectedItem;

           this.FormBorderStyle = borderStyle;
       }


   


الملفات المرفقة
.zip   EnumComboBox.zip (الحجم : 36.79 ك ب / التحميلات : 45)
الرد }}}
#2
شكرا لك و رحم الله والدك








snaptube vidmate word to pdf
الرد }}}
تم الشكر بواسطة: Anas Mahmoud


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


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