136 votes

Lier une énumération à une boîte combo WinForms, puis la définir

De nombreuses personnes ont répondu à la question de savoir comment lier une énumération à une boîte combo dans WinForms. C'est comme ça :

comboBox1.DataSource = Enum.GetValues(typeof(MyEnum));

Mais cela ne sert à rien si l'on ne peut pas définir la valeur réelle à afficher.

J'ai essayé :

comboBox1.SelectedItem = MyEnum.Something; // Does not work. SelectedItem remains null

J'ai également essayé :

comboBox1.SelectedIndex = Convert.ToInt32(MyEnum.Something); // ArgumentOutOfRangeException, SelectedIndex remains -1

Quelqu'un a-t-il une idée de la manière de procéder ?

3voto

Haider Ali Wajihi Points 600

Voici la solution pour charger l'item de l'enum dans la combobox :

comboBox1.Items.AddRange( Enum.GetNames(typeof(Border3DStyle)));

Et ensuite utiliser l'élément de l'énumération comme texte :

toolStripStatusLabel1.BorderStyle = (Border3DStyle)Enum.Parse(typeof(Border3DStyle),comboBox1.Text);

2voto

DaBlue Points 712

Aucune d'entre elles n'a fonctionné pour moi, mais celle-ci l'a fait (et elle a eu l'avantage supplémentaire de pouvoir avoir une meilleure description pour le nom de chaque enum). Je ne sais pas si c'est dû aux mises à jour de .net ou non, mais quoi qu'il en soit, je pense que c'est la meilleure solution. Vous aurez besoin d'ajouter une référence à :

en utilisant System.ComponentModel ;

enum MyEnum
{
    [Description("Red Color")]
    Red = 10,
    [Description("Blue Color")]
    Blue = 50
}

....

    private void LoadCombobox()
    {
        cmbxNewBox.DataSource = Enum.GetValues(typeof(MyEnum))
            .Cast<Enum>()
            .Select(value => new
            {
                (Attribute.GetCustomAttribute(value.GetType().GetField(value.ToString()), typeof(DescriptionAttribute)) as DescriptionAttribute).Description,
                value
            })
            .OrderBy(item => item.value)
            .ToList();
        cmbxNewBox.DisplayMember = "Description";
        cmbxNewBox.ValueMember = "value";
    }

Ensuite, lorsque vous voulez accéder aux données, utilisez ces deux lignes :

        Enum.TryParse<MyEnum>(cmbxNewBox.SelectedValue.ToString(), out MyEnum proc);
        int nValue = (int)proc;

2voto

Proteux Points 39
public Form1()
{
    InitializeComponent();
    comboBox.DataSource = EnumWithName<SearchType>.ParseEnum();
    comboBox.DisplayMember = "Name";
}

public class EnumWithName<T>
{
    public string Name { get; set; }
    public T Value { get; set; }

    public static EnumWithName<T>[] ParseEnum()
    {
        List<EnumWithName<T>> list = new List<EnumWithName<T>>();

        foreach (object o in Enum.GetValues(typeof(T)))
        {
            list.Add(new EnumWithName<T>
            {
                Name = Enum.GetName(typeof(T), o).Replace('_', ' '),
                Value = (T)o
            });
        }

        return list.ToArray();
    }
}

public enum SearchType
{
    Value_1,
    Value_2
}

1voto

Stijn Bollen Points 107

Convertissez l'enum en une liste de chaînes de caractères et ajoutez-la à la comboBox.

comboBox1.DataSource = Enum.GetValues(typeof(SomeEnum)).Cast<SomeEnum>();

Définir la valeur affichée à l'aide de selectedItem

comboBox1.SelectedItem = SomeEnum.SomeValue;

1voto

caronjudith Points 19
    public enum Colors
    {
        Red = 10,
        Blue = 20,
        Green = 30,
        Yellow = 40,
    }

comboBox1.DataSource = Enum.GetValues(typeof(Colors));

Full Source... Lier un enum à Combobox

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X