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 ?

0voto

Stix Points 465

Je suis un peu en retard pour cette fête,

La méthode SelectedValue.ToString() devrait récupérer le DisplayedName . Cependant, cet article DataBinding Enum et aussi avec des descriptions montre un moyen pratique d'avoir non seulement cela mais aussi d'ajouter un attribut de description personnalisé à l'enum et de l'utiliser pour la valeur affichée si vous préférez. Très simple et facile et environ 15 lignes de code (sauf si vous comptez les accolades) pour tout.

C'est un code assez astucieux et vous pouvez en faire une méthode d'extension pour démarrer ...

0voto

Victor Gomez Points 1

N'utiliser le casting que de cette manière :

if((YouEnum)ComboBoxControl.SelectedItem == YouEnum.Español)
{
   //TODO: type you code here
}

0voto

Vous pouvez utiliser les fonctions "FindString " :

Public Class Form1
    Public Enum Test
        pete
        jack
        fran
        bill
    End Enum
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ComboBox1.DataSource = [Enum].GetValues(GetType(Test))
        ComboBox1.SelectedIndex = ComboBox1.FindStringExact("jack")
        ComboBox1.SelectedIndex = ComboBox1.FindStringExact(Test.jack.ToString())
        ComboBox1.SelectedIndex = ComboBox1.FindStringExact([Enum].GetName(GetType(Test), Test.jack))
        ComboBox1.SelectedItem = Test.bill
    End Sub
End Class

0voto

bruno conde Points 28120
comboBox1.SelectedItem = MyEnum.Something;

devrait fonctionner parfaitement... Comment pouvez-vous dire que SelectedItem est nulle ?

0voto

Mehmet Aras Points 3901

Vous pouvez utiliser une liste de valeurs KeyValuePair comme source de données pour la combobox. Vous aurez besoin d'une méthode d'aide dans laquelle vous pouvez spécifier le type d'énumération et qui renvoie IEnumerable> où int est la valeur de l'énumération et string est le nom de la valeur de l'énumération. Dans votre combobox, définissez la propriété DisplayMember sur 'Key' et la propriété ValueMember sur 'Value'. Value et Key sont des propriétés publiques de la structure KeyValuePair. Ensuite, lorsque vous définissez la propriété SelectedItem sur une valeur d'énumération comme vous le faites, cela devrait fonctionner.

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