Comment désactiver l'édition des éléments dans la liste déroulante pour C #?


157

J'ai quelques éléments dans un ComboBox (WinForms avec C #). Je veux que leur contenu soit statique afin qu'un utilisateur ne puisse pas modifier les valeurs à l'intérieur lorsque l'application est exécutée. Je ne veux pas non plus que l'utilisateur ajoute de nouvelles valeurs à la ComboBox

Réponses:


300

Utilisez la propriété ComboStyle:

comboBox.DropDownStyle = ComboBoxStyle.DropDownList;

38
Cela peut également être défini dans la fenêtre des propriétés du concepteur.
Jeffrey

3
Avec les versions récentes, vous pouvez utilisercombo.Properties.TextEditStyle = DisableTextEditor
Keysharpener

21

C'est une autre méthode que j'utilise car changer DropDownSylepour lui donner DropDownListun aspect 3D et parfois c'est tout simplement moche.

Vous pouvez empêcher l'entrée de l'utilisateur en gérant l' KeyPressévénement de la zone de liste déroulante comme ceci.

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

4
Vous pouvez changer son apparence dans le concepteur, FlatStyle :)
StinkyCat

3
@StinkyCat Cela ne change pas l'apparence de la liste contextuelle, seulement le contrôle dans le formulaire.
Logarr

Vous devez gérer le menu contextuel où vous avez Pasteégalement une option . Je ne sais pas comment en ce moment.
Sinatr

3
Ok, pour supprimer, Pastevous devrez créer un faux menu contextuel vide et l'assigner à la ComboBox.
Sinatr

7

Yow peut changer le DropDownStyle dans les propriétés en DropDownList. Cela n'affichera pas la zone de texte pour le filtre.

DropDownStyle, propriété
(Capture d'écran fournie par FUSION CHA0S .)


0

J'ai essayé ComboBox1_KeyPress mais cela permet de supprimer le caractère et vous pouvez également utiliser la commande copier coller. Mon DropDownStyle est défini sur DropDownList mais toujours inutile. J'ai donc fait l'étape ci-dessous pour éviter l'édition de texte combobox.

  • Le code ci-dessous gère la touche de suppression et de retour arrière. Et désactive également la combinaison avec la touche de contrôle (par exemple ctr + C ou ctr + X)

     Private Sub CmbxInType_KeyDown(sender As Object, e As KeyEventArgs) Handles CmbxInType.KeyDown
        If e.KeyCode = Keys.Delete Or e.KeyCode = Keys.Back Then 
            e.SuppressKeyPress = True
        End If
    
        If Not (e.Control AndAlso e.KeyCode = Keys.C) Then
            e.SuppressKeyPress = True
        End If
    End Sub
  • Dans le chargement du formulaire, utilisez la ligne ci-dessous pour désactiver le clic droit sur le contrôle de la zone de liste déroulante pour éviter le couper / coller via un clic de souris.

    CmbxInType.ContextMenu = new ContextMenu()
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.