Come disabilitare la modifica degli elementi nella casella combinata per c #?


157

Ho alcuni elementi in un ComboBox (WinForms con C #). Voglio che il loro contenuto sia statico in modo che un utente non possa modificare i valori all'interno quando viene eseguita l'applicazione. Inoltre, non voglio che l'utente aggiunga nuovi valori al ComboBox

Risposte:


300

Usa la proprietà ComboStyle:

comboBox.DropDownStyle = ComboBoxStyle.DropDownList;

38
Questo può anche essere impostato nella finestra delle proprietà del designer.
Jeffrey,

3
Con le versioni recenti è possibile utilizzarecombo.Properties.TextEditStyle = DisableTextEditor
Keysharpener

21

Questo è un altro metodo che uso perché cambiarlo DropDownSyleper DropDownListrenderlo 3D e talvolta è semplicemente brutto.

È possibile impedire l'input dell'utente gestendo l' KeyPressevento del ComboBox in questo modo.

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

4
Puoi modificarne l'aspetto nel designer, FlatStyle :)
StinkyCat

3
@StinkyCat Questo non cambia l'aspetto dell'elenco spuntato, ma solo il controllo nel modulo.
Logarr

Devi gestire il menu del tasto destro dove hai Pasteanche l' opzione . Non ho idea di come in questo momento.
Sinatr,

3
Ok, per rimuovere Pastedovrai creare un falso menu contestuale vuoto e assegnarlo a ComboBox.
Sinatr,

7

È possibile modificare DropDownStyle nelle proprietà in DropDownList. Questo non mostrerà la TextBox per il filtro.

Proprietà DropDownStyle
(Screenshot fornito da FUSION CHA0S .)


0

Ho provato ComboBox1_KeyPress ma mi consente di eliminare il carattere e puoi anche usare il comando copia incolla. My DropDownStyle è impostato su DropDownList ma non è ancora utile. Quindi ho fatto il passaggio seguente per evitare la modifica del testo nella casella combinata.

  • Il codice sottostante gestisce il tasto Canc & Backspace. E disabilita anche la combinazione con il tasto di controllo (ad esempio ctr + C o 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
  • Nel caricamento del modulo, utilizzare la riga sotto per disabilitare il clic con il tasto destro del mouse sul controllo combobox per evitare di tagliare / incollare con il clic del mouse.

    CmbxInType.ContextMenu = new ContextMenu()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.