Dans C # WinApp, comment puis-je ajouter du texte et de la valeur aux éléments de mon ComboBox? J'ai fait une recherche et généralement les réponses utilisent "Liaison à une source" .. mais dans mon cas, je n'ai pas de source de liaison prête dans mon programme ... Comment puis-je faire quelque chose comme ça:
combo1.Item[1] = "DisplayText";
combo1.Item[1].Value = "useful Value"
la source
Vous pouvez utiliser une classe anonyme comme celle-ci:
MISE À JOUR: Bien que le code ci-dessus s'affiche correctement dans la zone de liste déroulante, vous ne pourrez pas utiliser
SelectedValue
ni lesSelectedText
propriétés deComboBox
. Pour pouvoir les utiliser, liez la zone de liste déroulante comme ci-dessous:la source
List<Object> items = new List<Object>();
J'ai ensuite pu utiliser la méthodeitems.Add( new { Text = "report A", Value = "reportA" } );
dans la boucle.comboBox.SelectedItem.GetType().GetProperty("Value").GetValue(comboBox.SelectedItem, null)
DataSource
vous pouvez utiliser les propriétésSelectedValue
ouSelectedText
de la zone de liste déroulante, donc pas besoin de faire de casting spécial.Vous devez utiliser
dynamic
objet pour résoudre l'élément combobox lors de l'exécution.la source
Vous pouvez utiliser
Dictionary
Object au lieu de créer une classe personnalisée pour ajouter du texte et de la valeur dans aCombobox
.Ajoutez des clés et des valeurs dans un
Dictionary
objet:Liez l'objet Dictionary source à
Combobox
:Récupérer la clé et la valeur:
Source complète: Combobox Text nd Value
la source
C'est l'un des moyens qui viennent à l'esprit:
combo1.Items.Add(new ListItem("Text", "Value"))
Et pour changer le texte ou la valeur d'un article, vous pouvez le faire comme ceci:
Il n'existe aucune classe appelée ListItem dans Windows Forms . Il n'existe que dans ASP.NET , vous devrez donc écrire votre propre classe avant de l'utiliser, comme @Adam Markowitz l'a fait dans sa réponse .
Consultez également ces pages, elles peuvent vous aider:
Comment ajouter un élément à une zone de liste déroulante
Comment: ajouter et supprimer des éléments d'un contrôle Windows Forms ComboBox, ListBox ou CheckedListBox
la source
Je ne sais pas si cela fonctionnera pour la situation donnée dans le message d'origine (sans parler du fait que c'est deux ans plus tard), mais cet exemple fonctionne pour moi:
Pour lire votre valeur, vous devrez convertir la propriété SelectedItem en un objet DictionaryEntry, puis vous pourrez évaluer les propriétés Key et Value de celui-ci. Par exemple:
la source
la source
Si quelqu'un est toujours intéressé par ceci, voici une classe simple et flexible pour un élément de zone de liste déroulante avec un texte et une valeur de tout type (très similaire à l'exemple d'Adam Markowitz):
Il
<T>
est préférable d' utiliser le que de le déclarer envalue
tant queobject
, car avecobject
vous, vous devrez alors garder une trace du type que vous avez utilisé pour chaque élément, et le cast dans votre code pour l'utiliser correctement.Je l'utilise depuis longtemps sur mes projets. C'est vraiment pratique.
la source
J'ai aimé la réponse de fab mais je ne voulais pas utiliser de dictionnaire pour ma situation, j'ai donc substitué une liste de tuples.
la source
Un exemple utilisant DataTable:
la source
Vous pouvez utiliser ce code pour insérer certains éléments dans une zone de liste déroulante avec du texte et une valeur.
C #
XAML
la source
Suite à la réponse d'Adam Markowitz, voici une manière générale de définir (relativement) simplement les
ItemSource
valeurs d'une zone de liste déroulanteenums
, tout en montrant l'attribut «Description» à l'utilisateur. (On pourrait penser que tout le monde voudrait le faire pour que ce soit un .NET liner one , mais ce n'est tout simplement pas le cas, et c'est la manière la plus élégante que j'ai trouvée).Tout d'abord, créez cette classe simple pour convertir n'importe quelle valeur Enum en un élément ComboBox:
Deuxièmement, dans votre
OnLoad
gestionnaire d'événements, vous devez définir la source de votre zone de liste déroulante pour être une listeComboEnumItems
basée sur chaque élémentEnum
de votreEnum
type. Cela peut être réalisé avec Linq. Ensuite, définissez simplementDisplayMemberPath
:Maintenant, l'utilisateur sélectionnera dans une liste de vos utilisateurs
Descriptions
, mais ce qu'il sélectionnera sera laenum
valeur que vous pouvez utiliser dans le code. Pour accéder à la sélection de l'utilisateur en code,comboBoxUserReadable.SelectedItem
sera leComboEnumItem
etcomboBoxUserReadable.SelectedValue
sera leEMyEnum
.la source
Vous pouvez utiliser un type générique:
Exemple d'utilisation d'un simple int-Type:
la source
J'ai eu le même problème, j'ai ajouté un nouveau
ComboBox
avec juste la valeur dans le même index puis le premier, puis quand je change le combo principal, l'index dans le second change en même temps, alors je prends la valeur du deuxième combo et l'utiliser.Voici le code:
la source
Créateur de classe:
Codes Form1:
la source
Voici comment Visual Studio 2013 le fait:
Un seul article:
Articles multiples:
Pas besoin de remplacer la classe ou d'inclure quoi que ce soit d'autre. Et oui, les appels
comboBox1->SelectedItem
etcomboBox1->SelectedIndex
fonctionnent toujours.la source
Ceci est similaire à certaines des autres réponses, mais est compact et évite la conversion en dictionnaire si vous avez déjà une liste.
Étant donné une
ComboBox
"zone de liste déroulante" sur un formulaire Windows et une classeSomeClass
avec lastring
propriété typeName
,Ce qui signifie que le SelectedItem est un
SomeClass
objet delist
, et chaque élément danscombobox
sera affiché en utilisant son nom.la source
DisplayMember
avant ... j'oublie toujours qu'il existe. Je me suis habitué à la solution que j'ai trouvée avant de faire attention à cette propriété, cela n'aidera pas toujours. Toutes les classes n'ont pas une propriétéName
ouTag
, ou une propriété de chaîne qui pourrait être utilisée arbitrairement comme texte d'affichage.base.Method();
), vous devriez également créer une classe dérivée pour chaque type différent que vous souhaitez ajouter aux zones de liste déroulante ou aux zones de liste. La classe que j'ai faite est flexible, vous pouvez l'utiliser avec n'importe quel type sans effort supplémentaire. Regardez ci-dessous pour ma réponse, et dites-moi ce que vous pensez :)Il s'agit d'une solution très simple pour les formulaires Windows si tout ce qui est nécessaire est la valeur finale sous forme de (chaîne). Les noms des éléments seront affichés sur la zone de liste déroulante et la valeur sélectionnée peut être facilement comparée.
et sur le gestionnaire d'événements obtenir la valeur (chaîne) de la valeur sélectionnée
la source
Meilleure solution ici;
Récupérer des données
la source