Bien qu'il ne soit vraiment pas possible d'utiliser a char
ou a string
comme base pour une énumération, je pense que ce n'est pas ce que vous aimez vraiment faire.
Comme vous l'avez mentionné, vous aimeriez avoir une énumération de possibilités et afficher une représentation sous forme de chaîne de cela dans une zone de liste déroulante. Si l'utilisateur sélectionne l'une de ces représentations de chaîne, vous souhaitez obtenir l'énumération correspondante. Et c'est possible:
Nous devons d'abord lier une chaîne à une valeur d'énumération. Cela peut être fait en utilisant ce DescriptionAttribute
qui est décrit ici ou ici .
Vous devez maintenant créer une liste de valeurs d'énumération et des descriptions correspondantes. Cela peut être fait en utilisant la méthode suivante:
/// <summary>
/// Creates an List with all keys and values of a given Enum class
/// </summary>
/// <typeparam name="T">Must be derived from class Enum!</typeparam>
/// <returns>A list of KeyValuePair<Enum, string> with all available
/// names and values of the given Enum.</returns>
public static IList<KeyValuePair<T, string>> ToList<T>() where T : struct
{
var type = typeof(T);
if (!type.IsEnum)
{
throw new ArgumentException("T must be an enum");
}
return (IList<KeyValuePair<T, string>>)
Enum.GetValues(type)
.OfType<T>()
.Select(e =>
{
var asEnum = (Enum)Convert.ChangeType(e, typeof(Enum));
return new KeyValuePair<T, string>(e, asEnum.Description());
})
.ToArray();
}
Vous aurez maintenant une liste des paires de valeurs clés de toutes les énumérations et leur description. Alors affectons simplement ceci comme source de données pour une zone de liste déroulante.
var comboBox = new ComboBox();
comboBox.ValueMember = "Key"
comboBox.DisplayMember = "Value";
comboBox.DataSource = EnumUtilities.ToList<Separator>();
comboBox.SelectedIndexChanged += (sender, e) =>
{
var selectedEnum = (Separator)comboBox.SelectedValue;
MessageBox.Show(selectedEnum.ToString());
}
L'utilisateur voit toutes les représentations sous forme de chaîne de l'énumération et dans votre code, vous obtiendrez la valeur d'énumération souhaitée.