Comment Remplir une combobox ou une listbox avec un Enum (Une énumération) VB.net
- Samedi 4 septembre 2010
- Paradmin
- Ecrire commentaire
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()