L’idée ici est de pouvoir remplir un objet avec une énumération, mais surtout pouvoir interagir dessus. Dans beaucoup d’exemples trouvés sur le web, on remplit l’objet avec le nom des membres de l’énumération. Rares sont les cas où on utilise aussi la valeur  des membres de l’énumération. Or cela devient intéressant lorsque l’on doit stocker la valeur dans une base de données pour ensuite la restituer à l’écran.

Dans ce tutoriel, nous allons voir deux manières de remplir une combobox

A. L’une avec uniquement les données fournies pour la déclaration de l’Enum.
Déclaration de l’Enum

Enum EnumtoFill
Red = 5
Green = 99
Blue = 50
Black = 0
White = 1
End Enum

Nous allons utiliser un class permettant de trasfomer et de stocker les membres de l’énumération. Dans cette classe, nous  changons la méthode to String pour renvoyer la description de l’Enum.

Public Class EnumDataSource
Private _Value As Object
Public Description As String

Public Sub New(ByVal ValueEnum As Object, ByVal StringEnum AsString)
_Value = ValueEnum
Description = StringEnum
End Sub

‘Rewrite function to display Description and not the type of the object.
Public Overrides Function ToString() As String
Return Description
End Function

Public ReadOnly Property valueOfEnum() As Integer
Get
Return CInt(_Value)
End Get
End Property

‘Shared Function to return a ArrayList usued in datasource property of the Control

Public Shared Function TransformEnum(ByRef myEnum AsSystem.Type) As ArrayList

Dim enumValue() As Integer
Dim VDP_Array As New ArrayList
enumValue = [Enum].GetValues(myEnum)
For Each nValue As Object In enumValue
VDP_Array.Add(NewEnumDataSource(nValue,[Enum].GetName(myEnum, nValue)))
Next
Return VDP_Array
End Function

End Class

Remplir la Combobox  avec l’Enum.

cbodata.ValueMember =  »valueOfEnum »
cbodata.DisplayMember =  »description »
cbodata.DataSource = EnumDataSource.TransformEnum(GetType(EnumtoFill))

B. L’autres en ajoutant une descriptB. L’autres en ajoutant une description à l’énumération pour un affichage plus user friendly.

Nous allons utiliser un class permettant de stocker les membres de l’énumération et la description associée à la valeur. Dans cette classe, nous  changons la méthode to String pour renvoyer la description de l’Enum.

Public Class EnumDescriptionPair

Private _Value As Integer
Public Description As String
Public stringOfEnum As String

Public Sub New(ByVal EnumItem As Object, ByVal EnumDescriptionAs String)
_Value = CInt(EnumItem)
Description = EnumDescription
stringOfEnum = EnumItem.ToString
End Sub

‘Rewrite function to display Description ans not the type of the object.
Public Overrides Function ToString() As String
Return Description
End Function

Public ReadOnly Property valueOfEnum() As Integer
Get
Return _Value
End Get
End Property

Déclaration de l’Enum
‘Enum declaration
Public Enum enumShape
Linear = 0
Circular = 1
Rectangle = 3
Square = 4
End Enum


‘Create a ArrayList of Enum + Description of Enum.
‘ ArrayList is used in datasource property of the Control
Public Function ListOfenumShape() As ArrayList
Dim VDP_Array As New ArrayList
VDP_Array.Add(New EnumDescriptionPair(enumShape.Linear, »My Line »))
VDP_Array.Add(NewEnumDescriptionPair(enumShape.Circular, »My circle »))
VDP_Array.Add(New EnumDescriptionPair(enumShape.Rectangle, »My rectangle »))
VDP_Array.Add(New EnumDescriptionPair(enumShape.Square, »My square »))
Return VDP_Array
End Function

Remplir la Combobox  avec l’Enum.

cbodata.ValueMember =  »valueOfEnum »
cbodata.DisplayMember =  »description »
cbodata.DataSource = ListOfenumShape()