Bonjour,
J'utilise de temps à autre ENUM.
Il m'arrive de l'utiliser par exemple pour définir le mode actif de ma page en stockant la valeur chaîne dans une zone cachée.
Le problème est que, lors du PostBack, j'avais du mal à retranscrire la valeur texte en variable de mon type « enum ».
Je viens enfin de trouver une solution (il était temps, certains penserons !) et je vous la livre ci-dessous au travers un exemple un peu plus poussé.
Ce code n'est là que pour illustrer des fonctions autour de ENUM, mais ce n'est pas un programme utile. Il s'adresse aux personnes qui connaissent déjà la grande utilité de ENUM en programmation.
Points montrés :
- Obtenir une string à partir d'une valeur de type énumération (Jours.Mardi.ToString)
- Convertir une énumération en tableau de string ([Enum].GetNames(GetType(Jours)))
- Retrouver la valeur du type de l'énumération à partir d'une string ([Enum].Parse(GetType(Jours), "Mardi")).
Source / Exemple :
========================== ASPX =======================
<body>
<form id="Form1" method="post" runat="server">
<asp:DropDownList id="ddlJours" runat="server"></asp:DropDownList>
</form>
</body>
=========================== VB ========================
Enum Jours
Lundi
Mardi
Jeudi
End Enum
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not IsPostBack Then
With ddlJours
.DataSource = [Enum].GetNames(GetType(Jours))
.DataBind()
.SelectedValue = Jours.Mardi.ToString
End With
Else
Dim LeJourChoisi As Jours
LeJourChoisi = [Enum].Parse(GetType(Jours), ddlJours.SelectedValue)
Select Case LeJourChoisi
Case Jours.Lundi
'
Case Jours.Mardi
'
Case Jours.Jeudi
'
End Select
End If
End Sub
Conclusion :
J'espère que ce code simple vous sera claire et profitable.
J'ai remarqué après rédaction que « tno » utilisait une partie de cette astuce dans une de ses contributions VB.
7 mars 2006 à 13:19
Bien sympa ces explications, mais est-ce que quelqu'un sait comment faire pour récupérer dans une property une énum parmi plusieurs, je m'explique :
J'aimerai pouvoir faire quelque chose dans cet esprit :
public class Objet1
public Enum LesNoms As byte
toto
titi
end enum
...
end class
public class Objet2
public Enum LesNoms As byte
Nana
Nene
Nono
Nini
end enum
...
end class
et encore d'autres dans le même genre avec des noms et quantités différents dans leur enum
puis mon objet principal
public class ObjPrincipal
inherits System.Windows.forms.Control
private EnCours as object
Public UneEnum As Enum ' n'est pas valable !
public property() ChoixNom As UneEnum
get
return UneEnum
end get
set(ByVal n As UneEnum)
UneEnum = n
end set
end property
...
public sub New(byval x as byte)
mybase.new()
select case x
case 0
Encours = New objet1()
case 1
Encours = New objet2()
...
end select
UneEnum = Encours.LesNoms
end sub
end class
Résumé : comment une propriété peut elle gérer des enum's différentes ?
Merci d'avance pour ceux qui pourraient résoudre ce problème.
Avec toute mon amitié
ViveLeRoi
11 nov. 2004 à 12:12
Cyril
11 nov. 2004 à 11:58
Effectivement il y mille et une façons plus simples d'exploiter un dropdownlist...
Mais sais-tu comment plus simplement retrouver la valeur de type énumération à partir d'une string ?
11 nov. 2004 à 00:53
Cyril
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.