La collection d'éléments ComboBox est une ObjectCollection, donc bien sûr vous pouvez y stocker ce que vous voulez, mais cela signifie que vous n'obtenez pas de propriété Text comme vous le feriez avec, par exemple, un ListViewItem. Le ComboBox affiche les éléments en appelant ToString() sur chaque élément, ou en utilisant la réflexion si la propriété DisplayMember est définie.
Mon ComboBox est en mode DropDownList. J'ai une situation où je veux rafraîchir le texte d'un seul élément de la liste lorsque l'utilisateur le sélectionne. Le problème est que le ComboBox ne demande pas le texte à aucun moment autre que lors du chargement initial, et je ne peux pas trouver comment faire ce que je veux autrement que de supprimer et de réajouter l'élément sélectionné comme ceci :
PlantComboBoxItem selectedItem = cboPlants.SelectedItem as PlantComboBoxItem;
// ...
cboPlants.BeginUpdate();
int selectedIndex = cboPlants.SelectedIndex;
cboPlants.Items.RemoveAt(selectedIndex);
cboPlants.Items.Insert(selectedIndex, selectedItem);
cboPlants.SelectedIndex = selectedIndex;
cboPlants.EndUpdate();
Ce code fonctionne bien, sauf pour le fait que mon événement SelectedIndex est déclenché deux fois (une fois lors de l'événement initial de l'utilisateur, et une autre fois lorsque je réinitialise la propriété dans ce code). Dans ce cas, ce n'est pas grave que l'événement soit déclenché deux fois, mais c'est inefficace, et je déteste ça. Je pourrais ajouter un indicateur pour qu'il quitte l'événement la deuxième fois, mais c'est bidouiller.
Y a-t-il un meilleur moyen pour que cela fonctionne ?