62 votes

Comment rendre le Combobox de winforms en lecture seule ?

Je ne veux pas que l'utilisateur puisse modifier la valeur affichée dans la combobox. J'ai utilisé Enabled = false mais cela grise le texte, donc ce n'est pas très lisible. Je veux qu'il se comporte comme une zone de texte avec ReadOnly = true où le texte est affiché normalement, mais l'utilisateur ne peut pas le modifier.

Existe-t-il un moyen d'y parvenir ?

169voto

Faire DropDownStyle à la propriété DropDownList au lieu de DropDown puis traiter le TextChanged pour empêcher l'utilisateur de modifier le texte.

22voto

Joe Points 5298

L'article ComboBox-with-read-only-behavior suggère une solution intéressante :

Créez à la fois une zone de texte en lecture seule et une combobox au même endroit. Lorsque vous voulez un mode lecture seule, affichez la zone de texte, et lorsque vous voulez qu'elle soit modifiable, affichez la zone combinée.

4 votes

Dévalorisé parce que : Cette réponse n'est pas vraiment utile. Le contrôle standard combobox fournit déjà la fonctionnalité désirée comme @amar vashi l'a souligné.

0 votes

@Andreas - downvote non mérité parce que ceci fait correspondent à ce que le PO voulait ; un comportement de lecture seule comme le contrôle TextBox, et non pas "limiter la saisie de l'utilisateur aux éléments de la liste" comme la plupart des gens l'ont supposé. L'article de CodeProject est une mise en œuvre plus approfondie de la réponse de Niall ci-dessous.

11voto

Dan Williams Points 2641

Je ne sais pas si c'est ce que vous cherchez, mais...

Définir le DropDownStyle = DropDownList

Ensuite, lors de l'événement SelectedIndexChanged

if (ComboBox1.SelectedIndex != 0)
{
    ComboBox1.SelectedIndex = 0;
}

Ce qui est laid, c'est qu'ils auront "l'impression" de pouvoir le changer. Ils pourraient penser qu'il s'agit d'une erreur, à moins que vous ne leur donniez une alerte leur expliquant pourquoi ils ne peuvent pas modifier la valeur.

9voto

Virus Points 16

Entrez la description du lien ici

Il suffit de changer le DropDownStyle à DropDownList . Ou si vous voulez qu'il soit complètement en lecture seule, vous pouvez définir l'option suivante Enabled = false Ou si vous n'aimez pas l'aspect de cette méthode, j'ai parfois deux contrôles, une zone de texte en lecture seule et une boîte combo, puis je cache la boîte combo et affiche la zone de texte si elle doit être en lecture seule et vice versa.

9voto

Marc Gravell Points 482669

La meilleure chose que je puisse suggérer est de remplacer la liste déroulante par une zone de texte en lecture seule (ou peut-être simplement une étiquette) - de cette façon, l'utilisateur peut toujours sélectionner/copier la valeur, etc.

Bien sûr, une autre tactique effrontée consisterait à définir l'option DropDownStyle à DropDownList et supprimez toutes les autres options - l'utilisateur n'a alors rien d'autre à choisir ;-p

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X