05-10-12, 01:29 PM
كاتب المشاركة : silverlight
كيف تبني كونترول يقبل ُEnum فقط من الممكن بناء كونترول يقبل Enum فقط وبطريقة بسيطة جدا ..... ومثال علي ذلك ListBox Control أو ComboBox Control والفكرة ببساطة كالأتي
بما اننا نستطيع الحصول علي Strings الموجودة داخل Enum وذلك باستخدام GetType لذلك من الممكن أن نضيف صفة Property الي الكونترول ومن ثم نمرر لها أي Enum وهذه االصفة Property ستكون من النوع Type والكود التالي يوضح الأمر
كود :
Private _enumType As Type
<Browsable(False), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _
Public Property EnumType As Type
Get
Return Me._enumType
End Get
Set(ByVal value As Type)
If (Not Me._enumType Is value) Then
Me._enumType = value
MyBase.Items.Clear()
If Not Me._enumType.IsEnum Then
Throw New ArgumentException((Me._enumType.FullName) & " is not enum")
End If
For Each obj As Object In [Enum].GetValues(Me._enumType)
MyBase.Items.Add(obj)
Next
End If
End Set
End Property
وكما سبق و أوضحت يمكن إضافة مثل هذه Property الموجودة في الكود أعلاه الي أي كونترول مثل ListBox أو ComboBox
والكود التالي يوضح ذلك ...............
EnumListBox كونترول
كود :
Imports System.Windows.Forms
Imports System.ComponentModel
Public Class EnumListBox
Inherits ListBox
#Region " Fields "
Private _enumType As Type
Private components As IContainer
#End Region
#Region " Constructor "
Public Sub New()
Me.InitializeComponent()
End Sub
#End Region
#Region " Properties "
<Browsable(False), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _
Public Property EnumType As Type
Get
Return Me._enumType
End Get
Set(ByVal value As Type)
If (Not Me._enumType Is value) Then
Me._enumType = value
MyBase.Items.Clear()
If Not Me._enumType.IsEnum Then
Throw New ArgumentException((Me._enumType.FullName) & " is not enum")
End If
For Each obj As Object In [Enum].GetValues(Me._enumType)
MyBase.Items.Add(obj)
Next
End If
End Set
End Property
#End Region
#Region " Methods "
Private Sub InitializeComponent()
Me.components = New Container
End Sub
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
If (disposing AndAlso (Not Me.components Is Nothing)) Then
Me.components.Dispose()
End If
MyBase.Dispose(disposing)
End Sub
#End Region
End Class
كود :
Imports System.Windows.Forms
Imports System.ComponentModel
Public Class EnumComboBox
Inherits ComboBox
#Region " Fields "
Private _enumType As Type
Private components As IContainer
#End Region
#Region " Constructor "
Public Sub New()
Me.InitializeComponent()
End Sub
#End Region
#Region " Properties "
<Browsable(False), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _
Public Property EnumType As Type
Get
Return Me._enumType
End Get
Set(ByVal value As Type)
If (Not Me._enumType Is value) Then
Me._enumType = value
MyBase.Items.Clear()
If Not Me._enumType.IsEnum Then
Throw New ArgumentException((Me._enumType.FullName) & " is not enum")
End If
For Each obj As Object In [Enum].GetValues(Me._enumType)
MyBase.Items.Add(obj)
Next
End If
End Set
End Property
#End Region
#Region " Methods "
Private Sub InitializeComponent()
Me.components = New Container
End Sub
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
If (disposing AndAlso (Not Me.components Is Nothing)) Then
Me.components.Dispose()
End If
MyBase.Dispose(disposing)
End Sub
#End Region
End Class ' AioComboBox
تقبلوا تحياتي
أخوكم عمر