تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مقال- أفكار في الدوت نت Enum
#3
المثال الثاني:

من المؤكد أن الكثير من االمبرمجين يعلمون كيفية صناعة كونترول يتم توريثه من ListBox أو ComboBox ومن ثم نضيف له الألوان المختلفة ولو بحثتم جيدا في الموقع أو علي النت بشكل عام ستجدون أفكارا كثيرة تتحدث عن هذا الأمر. عموما المثال التالي سيوضح نفس الأمر ولكن باستخدام Enum وبأسلوب مغاير للطرق المعتادة.

في الدوت نت يوجد Enum إسمه KnownColor و الكود التالي يوضح كيفية إضافته الي ComboBox واستخدامه في الحصول علي لون معين

وتتلخص الفكرة و بإختصار شديد في أننا نقوم بتعريف متغير عبارة عن Type ومن ثم نستخدم GetType ونمرر لها Enum ومن ثم نستخدم جملة For.....Each لكي نضيف المتغيرات الموجودة في أي Enum الي ComboBox وذلك باستخدام Enum.GetValues والكود التالي يوضح الفكرة و لكي تقوم بتنفيذ الكود افتح مشروع وأضف الي الفورم .... كومبوبوكس كونترول ثم اكتب الكود بالشكل التالي


كود :
Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim KnonColorEnumType As Type = GetType(KnownColor)
For Each knownColorObject As Object In [Enum].GetValues(KnonColorEnumType)
If Not ComboBox1.Items.Contains(knownColorObject) Then ComboBox1.Items.Add(knownColorObject)
Next

End Sub

End Class
ويمكن إعادة كتابة الكود أعلاه بالشكل التالي ولكن مع استخدام ListBox بدلا من ComboBox
وستلاحظون هنا كيفية تمرير القيمة مباشرة بدون تعريف متغير يعبر عن Type كما بالكود أعلاه


كود :
Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For Each knownColorObject As Object In [Enum].GetValues(GetType(KnownColor))
If Not ListBox1.Items.Contains(knownColorObject) Then ListBox1.Items.Add(knownColorObject)
Next
End Sub

End Class
الأن وبعد أن تم إضافة القيم التي تخص KnownColor Enum يتبقي كيفية استرجاع القيمة الخاصة بكل عنصر أو كل متغير داخل Enum لذلك يمكننا أن نبني دالة بسيطة جدا لتحويل كلString من عناصر KnowColor Enum الي KnownColor ويتم ذلك باستخدام Enum.Prase والكود التالي يوضح شكل الدالة


كود :
Private Function GetKnowColorString(ByVal ColorName As String, ByVal ignoreCase As Boolean) As KnownColor
Return CType([Enum].Parse(GetType(Drawing.KnownColor), ColorName, ignoreCase), Drawing.KnownColor)
End Function
ومن ثم في الحدث SelectedIndexChanged يتم استرجاع اللون واستخدامه كيفما شئنا
والكود التالي يوضح كيفية استرجاع اللون ومن ثم تغيير خلفية االفورم


كود :
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Me.BackColor = Color.FromKnownColor(GetKnowColorString(Me.ComboBox1.SelectedItem, True))
End Sub

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
Me.BackColor = Color.FromKnownColor(GetKnowColorString(Me.ListBox1.SelectedItem, True))
End Sub
الكود التالي يوضح الشكل النهائي للكود وبالمرفقات ستجدون نسخة من المثال


كود :
Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Fill ListBox with KnowColor Enum
For Each knownColorObject As Object In [Enum].GetValues(GetType(KnownColor))
If Not ListBox1.Items.Contains(knownColorObject) Then ListBox1.Items.Add(knownColorObject)
Next

' Fill ComboBox with KnowColor Enum
Dim KnonColorEnumType As Type = GetType(KnownColor)
For Each knownColorObject As Object In [Enum].GetValues(KnonColorEnumType)
If Not ComboBox1.Items.Contains(knownColorObject) Then ComboBox1.Items.Add(knownColorObject)
Next
End Sub

Private Function GetKnowColorString(ByVal ColorName As String, ByVal ignoreCase As Boolean) As KnownColor
Return CType([Enum].Parse(GetType(Drawing.KnownColor), ColorName, ignoreCase), Drawing.KnownColor)
End Function

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Me.BackColor = Color.FromKnownColor(GetKnowColorString(Me.ComboBox1.SelectedItem, True))
End Sub

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
Me.BackColor = Color.FromKnownColor(GetKnowColorString(Me.ListBox1.SelectedItem, True))
End Sub

End Class
الكود الموجود بالمرفقات بنسخة الفيجوال استوديو 2010

في المشاركات اللاحقة سوف نناقش كيف نستفيد أكثر من Enum و بطرق أخري مختلفة

تقبلوا تحياتي ولا تنسونا في دعائكم..............

أخوكم عمر


الملفات المرفقة
.rar   Enum_Example2_src.rar (الحجم : 61.28 ك ب / التحميلات : 63)
}}}
تم الشكر بواسطة:


الردود في هذا الموضوع
مقال- أفكار في الدوت نت Enum - بواسطة Raggi Tech - 05-10-12, 01:16 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - مقدمة RaggiTech 3 6,341 30-07-21, 05:14 PM
آخر رد: kebboud
  مقال: الكومبو بوكس ComboBox كيف تضيف أيقونات Blue Sky 1 3,453 30-06-19, 10:41 AM
آخر رد: invocker
  التــعامل مع cmd من خلال الدوت نت مبتدئ في الاحتراف 3 4,039 02-06-18, 12:36 AM
آخر رد: YousefOkasha
  أفكار في الجرافكس AlignRectangle silverlight 0 1,714 14-10-17, 02:02 PM
آخر رد: silverlight
  تفقيط الارقام فى الدوت نت مبرمج أوتار 17 13,411 20-04-17, 12:21 PM
آخر رد: محمد بوقزاحة
  [مقال] تشغيل برمجيات الدوت نت بدون تنصيب النت فروم ويرك m0075 13 11,120 13-02-14, 08:29 PM
آخر رد: Omar Mekkawy
  مقال- كيفية الاستغناء عن الداتا بيز التقليدية في برامجنا – ألجزء الأول RaggiTech 1 3,684 06-10-12, 12:23 AM
آخر رد: RaggiTech
  مقال- تطوير الكونترول Property Attributes الجزء الثالث RaggiTech 0 2,472 06-10-12, 12:20 AM
آخر رد: RaggiTech
  مقال- تطوير الكونترول Skin Control RaggiTech 0 2,625 06-10-12, 12:08 AM
آخر رد: RaggiTech
  مقال- كيف تصنع ملفات المساعدة Help Files وتربطها مع برنامجك RaggiTech 0 3,414 05-10-12, 07:30 PM
آخر رد: RaggiTech

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


يقوم بقرائة الموضوع: