Comment puis-je obtenir à la zone de liste de l'élément “clé” en c#, winforms application?
Je suis en train d'écrire une application winforms dans laquelle un utilisateur sélectionne un élément dans la liste et modifie certaines données qui fait partie d'un objet associé. Les modifications sont ensuite appliquées à partir de la liste des objets d'un fichier sous-jacent.
Dans ASP.Net l'affectation d'un système différent de la valeur à un élément de la liste que l'affichage de texte, l'utilisateur voit, est trivial. Dans une application winforms, vous devez définir le "Displaymember" et le "Valuemember" de chaque élément dans un peu plus compliqué (et pas souvent liées à l'internet) processus.
Ce que j'ai fait. En mode debug, j'ai confirmé que chaque élément possède maintenant une valeur qui est l'affichage de membre ("amical" chaîne de caractères que l'utilisateur voit) et une clé, la valuemember, qui détient la clé d'une table de hachage de l'objet où les données soient mises à jour existe.
Ainsi, lorsqu'un utilisateur sélectionne une chaîne à modifier le programme doit passer la "clé" de la table de hachage, la détacher de l'objet et de permettre la modification de prendre place sur elle.
Le catch?
Je ne vois aucun moyen évident de raconter le programme à consulter l'article valuemember. J'ai naïvement attendu pour remplir la zone de liste "SelectedValue de la propriété", mais ce serait trop simple, et de loin. Alors, comment diable puis-je obtenir la liste la valeur de l'article?
Vous devez vous connecter pour publier un commentaire.
En utilisant à la fois la
SelectedIndexChanged
etSelectedValueChanged
n'a pas de travail pour moi - laListBox's
SelectedValue
propriété a toujours été nul. Cela m'a surpris, trop.Comme une lame de solution de contournement, vous pouvez simplement tirer l'objet de la
ListBox
directement, à l'aide de laSelectedIndex
:(
Test
est juste une simple classe avec deux propriétés -ID
etName
).Il semble qu'il devrait y avoir une meilleure façon, mais si rien d'autre, cela devrait fonctionner.
Bon alors la réponse est venue comme un résultat de Andy réponse, d'où mon upvoting cette réponse.
Mais quand je créé un peu de classe et a essayé de semer le listitem dans cette classe, le programme a généré une exception.
Révélateur de l'exception m'a dit que le programme ne peut pas jeter un DictionaryEntry dans une classe du type j'avais défini.
Alors j'ai supprimé la classe de proxy et de les reformuler la demande ainsi:
Et c'est du tout bon.
Bizarrement réponse simple à la fin. Merci pour l'astuce Andy.
Je sais que c'est un très vieux post, mais j'ai été incapable de jeter ma zone de liste d'éléments dans un article de Dictionnaire. Cette solution a fonctionné pour moi .NET 3.5 pour windows forms.
Essayer de saisir le "ValueMember" de dans le ListBox1_SelectedValueChanged événement.
Simple et propre:
Ajouter un Élément (inclure une Clé et une Valeur) à ListBox:
Obtenez de l'Élément de la sélection de l'utilisateur:
la
lsbListBoxName
est le nom de la liste et le code est VB.NET vous pouvez utiliser Cet Outil En Ligne de couvent en couvent, C#.Je me suis retrouvé ici quand j'étais à la recherche comment obtenir la valeur d'un Élément dans la zone de liste, puis l'évidence est venu à mon esprit.
Le secret est que l'Élément de méthode dans
C#
,VB
et les autres est un tableau, de manière à obtenir une valeur de n'importe quel Article vous avez juste à écrire ceci:Pour obtenir tous les Éléments et les mettre dans un document ou à une chaîne, il suffit de faire comme ceci:
J'espère que j'ai aidé à vous les gars. C'est le plus simple de répondre à votre post.