2017-08-27 3 views
0

J'ai un contrôle CheckedListBox avec 6 cases à cocher à choisir. J'essaie de détecter ce qui suit:Comment obtenir la valeur de contrôle actuellement sélectionnée dans CheckedListBox?

L'utilisateur vérifie le troisième index et modifie la valeur de non cochée à cochée. Interne: appel d'un événement - Récupère la valeur vérifiée de ce troisième index.

Cela semble suggérer d'ajouter un événement SelectedIndexChanged. Cela ne me dit pas que l'utilisateur a changé la valeur.

Il en existe une autre: SelectedValueChanged.

Je ne sais pas si cela me dit quoi que ce soit non plus, que la fonction est:

*_SelectedValueChanged(object sender, EventArgs e) 

EventArgs est une sorte de inutile d'obtenir cette information requise.

Encore une fois, j'ai simplement besoin d'obtenir la valeur vérifiée de l'élément que l'utilisateur vient de sélectionner. Je ne suis pas intéressé par la collecte de tous les éléments sélectionnés. Juste l'actuel sélectionné. Merci.

+0

Oops, mon mauvais. J'ai confondu cela avec un contrôle différent. Vous pouvez utiliser quelque chose comme 'chkList.Items [chkList.SelectedIndex]' où 'chkList' est votre CheckedListBox. Par exemple: 'Console.WriteLine (chkList.Items [chkList.SelectedIndex] .ToString());'. –

+0

Alors que ToString() donne la valeur, il ne me dit pas si l'élément est coché ou non. Et pardonnez-moi si je me suis trompé de valeur pour la valeur de la chaîne, alors que je voulais dire la valeur vérifiée. Encore, sachant les deux est utile. – Phil

+0

Vérifiez ma réponse ci-dessous. –

Répondre

1

Afin d'obtenir la valeur affichée (contenu) de l'élément sélectionné, vous pouvez utiliser quelque chose comme ce qui suit:

Console.WriteLine(checkedListBox1.Items[checkedListBox1.SelectedIndex].ToStr‌​ing()); 

Ou une version plus courte:

Console.WriteLine(checkedListBox1.SelectedItem.ToString()); 

Pour déterminer si le sélectionné article est cochée ou non, vous pouvez utiliser quelque chose comme ce qui suit:

Console.WriteLine(checkedListBox1.CheckedItems.Contains(checkedListBox1.SelectedItem)); 

Th est de vérifier si le contenu de l'élément sélectionné peut être trouvé parmi les éléments cochés. Cela pourrait conduire à un mauvais résultat si votre CheckedListBox a des doublons. Pour éviter cela, vous pouvez vérifier pour l'indice au lieu de la valeur, comme celui-ci:

Console.WriteLine(checkedListBox1.CheckedIndices.Contains(checkedListBox1.SelectedIndex)); 

Edit: Une solution encore mieux que je viens de trouver, est d'utiliser la méthode GetItemChecked. Quelque chose comme ce qui suit fonctionnerait parfaitement:

Console.WriteLine(checkedListBox1.GetItemChecked(checkedListBox1.SelectedIndex)); 

Hope that helps :)

+0

L'utilisation de Contains() ne peut fonctionner que lorsque l'élément est déjà sélectionné. Si je coche une case pour la première fois, Contains() semble retourner false. Si je le fais à nouveau, il semble revenir vrai. – Phil

+0

Etes-vous sûr de cocher la case * (ne pas simplement sélectionner l'élément) *? Vous devrez peut-être jeter un coup d'œil sur ['CheckOnClick'] (https://msdn.microsoft.com/fr-fr/library/system.windows.forms.checkedlistbox.checkonclick (v = vs.110) .aspx) propriété. Si vous définissez la valeur sur true, les éléments seront cochés/décochés en un clic (lorsque l'élément est sélectionné). –

+0

Vous étiez quelques secondes devant moi sur demander une telle propriété. Le cliquetis et le double-clic étaient confus et probablement pour mes utilisateurs.La propriété a fait la différence. Merci! – Phil