05-10-12, 01:16 PM
المثال الثاني:
من المؤكد أن الكثير من االمبرمجين يعلمون كيفية صناعة كونترول يتم توريثه من ListBox أو ComboBox ومن ثم نضيف له الألوان المختلفة ولو بحثتم جيدا في الموقع أو علي النت بشكل عام ستجدون أفكارا كثيرة تتحدث عن هذا الأمر. عموما المثال التالي سيوضح نفس الأمر ولكن باستخدام Enum وبأسلوب مغاير للطرق المعتادة.
في الدوت نت يوجد Enum إسمه KnownColor و الكود التالي يوضح كيفية إضافته الي ComboBox واستخدامه في الحصول علي لون معين
وتتلخص الفكرة و بإختصار شديد في أننا نقوم بتعريف متغير عبارة عن Type ومن ثم نستخدم GetType ونمرر لها Enum ومن ثم نستخدم جملة For.....Each لكي نضيف المتغيرات الموجودة في أي Enum الي ComboBox وذلك باستخدام Enum.GetValues والكود التالي يوضح الفكرة و لكي تقوم بتنفيذ الكود افتح مشروع وأضف الي الفورم .... كومبوبوكس كونترول ثم اكتب الكود بالشكل التالي
ويمكن إعادة كتابة الكود أعلاه بالشكل التالي ولكن مع استخدام ListBox بدلا من ComboBox
وستلاحظون هنا كيفية تمرير القيمة مباشرة بدون تعريف متغير يعبر عن Type كما بالكود أعلاه
الأن وبعد أن تم إضافة القيم التي تخص KnownColor Enum يتبقي كيفية استرجاع القيمة الخاصة بكل عنصر أو كل متغير داخل Enum لذلك يمكننا أن نبني دالة بسيطة جدا لتحويل كلString من عناصر KnowColor Enum الي KnownColor ويتم ذلك باستخدام Enum.Prase والكود التالي يوضح شكل الدالة
ومن ثم في الحدث SelectedIndexChanged يتم استرجاع اللون واستخدامه كيفما شئنا
والكود التالي يوضح كيفية استرجاع اللون ومن ثم تغيير خلفية االفورم
الكود التالي يوضح الشكل النهائي للكود وبالمرفقات ستجدون نسخة من المثال
الكود الموجود بالمرفقات بنسخة الفيجوال استوديو 2010
في المشاركات اللاحقة سوف نناقش كيف نستفيد أكثر من Enum و بطرق أخري مختلفة
تقبلوا تحياتي ولا تنسونا في دعائكم..............
أخوكم عمر
من المؤكد أن الكثير من االمبرمجين يعلمون كيفية صناعة كونترول يتم توريثه من 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وستلاحظون هنا كيفية تمرير القيمة مباشرة بدون تعريف متغير يعبر عن 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كود :
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كود :
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في المشاركات اللاحقة سوف نناقش كيف نستفيد أكثر من Enum و بطرق أخري مختلفة
تقبلوا تحياتي ولا تنسونا في دعائكم..............
أخوكم عمر
