¿Cómo deshabilitar la edición de elementos en el cuadro combinado para c #?

157

Tengo algunos elementos en un ComboBox (WinForms con C #). Quiero que su contenido sea estático para que un usuario no pueda cambiar los valores internos cuando se ejecuta la aplicación. Tampoco quiero que el usuario agregue nuevos valores al ComboBox

Mobin
fuente

Respuestas:

300

Use la propiedad ComboStyle:

comboBox.DropDownStyle = ComboBoxStyle.DropDownList;
Dan Walker
fuente
38
Esto también se puede configurar en la ventana de propiedades del diseñador.
Jeffrey
3
Con versiones recientes que puede usarcombo.Properties.TextEditStyle = DisableTextEditor
Keysharpener
21

Este es otro método que utilizo porque cambiar DropDownSylea DropDownListhace que se vea en 3D y, a veces su simplemente no es atractivo.

Puede evitar la entrada del usuario manejando el KeyPressevento del ComboBox como este.

private void ComboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
      e.Handled = true;
}
Isuru
fuente
44
Puede cambiar su apariencia en el diseñador, FlatStyle :)
StinkyCat
3
@StinkyCat Eso no cambia el aspecto de la lista emergente, solo el control en el formulario.
Logarr
Tienes que manejar el menú del botón derecho donde también tienes la opción Paste. No tengo idea de cómo ahora.
Sinatr
3
Ok, para eliminar Pastetendrás que crear un falso menú contextual vacío y asignarlo al ComboBox.
Sinatr
7

Yow puede cambiar el DropDownStyle en propiedades a DropDownList. Esto no mostrará el cuadro de texto para el filtro.

Propiedad DropDownStyle
(Captura de pantalla proporcionada por FUSION CHA0S .)

Sumit Agrawal
fuente
0

Probé ComboBox1_KeyPress pero permite eliminar el carácter y también puedes usar el comando copiar y pegar. Mi DropDownStyle está configurado en DropDownList pero aún no sirve. Así que hice el siguiente paso para evitar la edición de texto del cuadro combinado.

  • Debajo del código se maneja la tecla borrar y retroceder. Y también deshabilita la combinación con la tecla de control (por ejemplo, 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
  • En el formulario de carga, use la línea de abajo para desactivar el clic derecho en el control del cuadro combinado para evitar cortar / pegar con el clic del mouse.

    CmbxInType.ContextMenu = new ContextMenu()
Sushil Jadhav
fuente