Winforms – Comment empêcher la sélection d’éléments de la Listbox

Dans WinForms, j’ai parfois une boucle qui parcourt une liste déroulante sélectionnant des éléments.

Pendant ce temps, je ne veux pas que l’utilisateur sélectionne des éléments dans cette liste avec la souris ou les touches.

J’ai regardé MyListbox.enabled = false mais cela grise tous les éléments. Je ne veux pas ça.

Comment empêcher la sélection d’éléments dans une liste déroulante?

Basculez la propriété Listbox.SelectionMode sur SelectionMode.None

Editer comme je vois le réglage sur SelectionMode . Personne ne désélectionne tous les éléments précédemment sélectionnés et lève une exception si SetSelected est appelé dans la zone de liste.

Je pense que le comportement souhaité n’est pas possible (sans vouloir griser les éléments avec Enabled=false ).

Vous pouvez avoir de la chance si vous sous-classe le ListBox et que vous substituez la méthode OnMouseClick:

 public class CustomListBox : ListBox { public bool SelectionDisabled = false; protected override void OnMouseClick(MouseEventArgs e) { if (SelectionDisabled) { // do nothing. } else { //enable normal behavior base.OnMouseClick(e); } } } 

Bien sûr, vous voudrez peut-être mieux cacher les informations ou concevoir les classes, mais c’est la fonctionnalité de base. Vous devrez peut-être également remplacer d’autres méthodes.

Créez un gestionnaire d’événements qui supprime le focus de la Listbox et abonnez-le à l’événement GotFocus de la Listbox. De cette façon, l’utilisateur ne pourra jamais rien sélectionner dans la liste. La ligne de code suivante le fait avec une méthode anonyme en ligne:

txtBox.GotFocus + = (object anonSender, EventArgs anonE) => {txtBox.Parent.Focus (); };

* Edit : explication de code