Comment rendre un ComboBox non modifiable dans .NET?


205

Je veux avoir un "select-only" ComboBoxqui fournit une liste d'éléments pour que l'utilisateur puisse choisir. La saisie doit être désactivée dans la partie texte du ComboBoxcontrôle.

Ma recherche initiale de cela a révélé une suggestion trop complexe et erronée pour capturer l' KeyPressévénement.

Réponses:


378

Pour rendre la partie texte d'un ComboBox non modifiable, définissez la propriété DropDownStyle sur "DropDownList". Le ComboBox est désormais essentiellement sélectif uniquement pour l'utilisateur. Vous pouvez le faire dans le concepteur Visual Studio ou en C # comme ceci:

stateComboBox.DropDownStyle = ComboBoxStyle.DropDownList;

Lien vers la documentation de la propriété ComboBox DropDownStyle sur MSDN.


8
Une chose à garder à l'esprit en faisant cela signifie que vous ne pouvez plus mettre à jour la Textpropriété par programme, l'utilisiez pour afficher un message par défaut en utilisantComboBox.SelectedIndex = -1;
Lankymart

Existe-t-il un moyen de le faire via l'interface graphique de Visual C # sans avoir à le modifier dans le code? On dirait qu'une «valeur par défaut» serait une chose normale à vouloir configurer
muzzlator

6
Comment éviter l'apparence grise?
Anders Lindén

2
@ AndersLindén a défini la propriété FlatStyle sur Flat.
Xam

@Xam Alors, où va la frontière? Lorsque je cherche un peu sur Google, il semble que je doive faire le dessin moi-même pour qu'il soit acceptable.
Anders Lindén

67

Pour ajouter une référence GUI Visual Studio, vous pouvez trouver les DropDownStyleoptions sous les propriétés du ComboBox sélectionné:

entrez la description de l'image ici

Ce qui ajoutera automatiquement la ligne mentionnée dans la première réponse au Form.Designer.cs InitializeComponent(), comme ceci:

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

33

Restez sur votre zone de liste déroulante et recherchez la propriété DropDropStyle dans la fenêtre des propriétés, puis choisissez DropDownList .



1

Pour continuer à afficher les données dans l'entrée après la sélection, procédez comme suit:

VB.NET
Private Sub ComboBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ComboBox1.KeyPress
    e.Handled = True
End Sub



C#
Private void ComboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    e.Handled = true;
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.