63 votes

Comment empêcher la saisie manuelle dans une ComboBox en C#

J'ai un formulaire en C# qui utilise une fonction ComboBox . Comment empêcher un utilisateur d'entrer manuellement du texte dans l'écran d'accueil ? ComboBox en C# ?

this.comboBoxType.Font = new System.Drawing.Font("Arial", 15.75F);
this.comboBoxType.FormattingEnabled = true;
this.comboBoxType.Items.AddRange(new object[] {
            "a",
            "b",
            "c"});
this.comboBoxType.Location = new System.Drawing.Point(742, 364);
this.comboBoxType.Name = "comboBoxType";
this.comboBoxType.Size = new System.Drawing.Size(89, 32);
this.comboBoxType.TabIndex = 57;   

Je veux que A, B, C soient les seules options.

0 votes

159voto

Reinaldo Points 1598

Il suffit de définir votre combo comme une DropDownList :

this.comboBoxType.DropDownStyle = ComboBoxStyle.DropDownList;

1 votes

En faisant cela, je ne peux pas mettre le texte par défaut "Select A Item" ?

0 votes

Il suffit d'ajouter this.comboBoxType.SelectedIndex = 0; pour que le "défaut" soit le premier élément à la fin de votre bloc de code ci-dessus.

21voto

Justin Pihony Points 21088

Je crois que vous voulez définir le DropDownStyle sur DropDownList.

this.comboBoxType.DropDownStyle = 
    System.Windows.Forms.ComboBoxStyle.DropDownList;

Vous pouvez également le faire à partir du concepteur WinForms en sélectionnant le contrôle, en allant dans la fenêtre des propriétés et en changeant la propriété "DropDownStyle" en "DropDownList".

8voto

sherin_ Points 342

Vous pouvez supprimer la gestion de l'appui sur la touche en ajoutant l'option e.Handled = true à l'événement KeyPress du contrôle :

private void Combo1_KeyPress(object sender, KeyPressEventArgs e)
{
    e.Handled = true;
}

2 votes

Vous pouvez toujours cliquer avec le bouton droit de la souris sur le texte sélectionné dans la liste déroulante et cliquer sur Couper, et voilà, le texte a disparu.

1 votes

Vous pouvez même supprimer le personnage.

2voto

Tates Points 29

J'aimerais conserver la possibilité d'insérer manuellement des éléments, mais limiter les éléments sélectionnés à ce qui se trouve dans la liste. J'ajouterais cet événement à la ComboBox. Tant que vous obtenez le SelectedItem et non le Text, vous obtenez les éléments prédéfinis corrects : a, b et c.

private void cbx_LostFocus(object sender, EventArgs e)
{
  if (!(sender is ComboBox cbx)) return;
  int i;
  cbx.SelectedIndex = (i = cbx.FindString(cbx.Text)) >= 0 ? i : 0;
}

1voto

DevEstacion Points 1567

Pourquoi utiliser une ComboBox alors ?

Le C# dispose d'un contrôle appelé Boîte de liste . Techniquement, la différence entre une ComboBox et une Listbox est qu'une ComboBox peut recevoir des entrées, donc si ce n'est pas le contrôle dont vous avez besoin, je vous suggère d'utiliser ListBox

Guide de consommation Listbox ici : ListBox C#

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