![]() |
|
[VB.NET] ربط Enum بـ ComboBox واستخدامها بالطريقة الصحيحة - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم امثلة ومشاريع VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=188) +--- الموضوع : [VB.NET] ربط Enum بـ ComboBox واستخدامها بالطريقة الصحيحة (/showthread.php?tid=36347) |
ربط Enum بـ ComboBox واستخدامها بالطريقة الصحيحة - Anas Mahmoud - 09-09-20 بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته المثال بلغة C# تقديم: ال Enum كما تعلمون اخواني الكرام هو عبارة عن مجموعة من الثوابت المسماه ، التي تأخذ قيم رقمية تعبر عن هذه الثوابت ، كتعبير عن الحالة مثلا اذا اردنا تخزين حالة الموظف ( 1 = نشط ، 0 = غير نشط ، 2 = مفصول ) مثلا ، فبدلا من كتابة الارقام دون ان تحمل معني نقوم بتعريف Enum به هذه القيم الثابته مسماه حتى يكون استخدامها ذو معنى : كود : Enum EmployeeStateالان لسنا مضطرين للقلق حول القيم الرقمية لكل حالة ، بدلا من ذلك نكتب سطر له معنى : كود : employee.State = EmployeeState.Activeهذا مجرد تقديم ولتفاصيل اكثر عن الموضوع هذا موضوع وافي وكافي عن ال Enums للاستاذ سيلفر لايت بارك الله فيه تقديم عن الـ ComboBox: في البداية يجب ان اشير الى نقطة هامة ، ال ComboBox شأنها شأن ادوات المجموعات ( ان صح التعبير ) كالـ ListBox و CheckedListbox تقبل عناضر من اي نوع ، وليس نوع نصي String فقط ، في الحقيقة يمكنك اضافة عناصر للComboBox من كلاساتك الخاصة اذا اردت او من الانواع المعرفة مسبقا ، كل ما في الامر انه يجب عليك تحديد الخاصية في هذا النوع التي ستظهر للمستخدم في عناصر الكومبو بوكس DisplayMember والا يقوم هو بعرض ToString من هذه العناصر افتراضيا ، ولكن العناصر بانوعها لازالت موجودة بمعني اذا اضفت لل ComboBox عناصر من نوع Employee مثلا ، وقت بتحديد الخاصية DisplayMember الى "EmployeeName" فانه سيقوم بعرض للمستخدم اسماء الموظفين للعرض فقط ، ولكن كائن الموظف بكامل خصائصه مازال موجود ويمكن استدعائه بشكل طبيعي باستخدام DirectCast استخدام Enum مع ComboBox: في مثالنا سأقوم بتعريف Enum لفصول السنة الاربعة : كود : Public Enum Seasonطيب جميل جدا ، الان ماذا نفعل اذا اردنا ربط ال 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يمكن تطبيق هذه الطريقة على Enum معرفة بالفعل مثلا FormBorderStyle التى تحدد شكل الفورم : في حدث Load : كود : comboBox2.DataSource = [Enum].GetValues(GetType(FormBorderStyle))الان في حدث comboBox2_SelectedIndexChanged : كود : Private Sub comboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles comboBox2.SelectedIndexChanged[attachment=25636] |