¿Cómo puedo hacer que un ComboBox no sea editable en .NET?

205

Quiero tener un "solo selección" ComboBoxque proporcione una lista de elementos para que el usuario pueda seleccionar. La escritura debe estar deshabilitada en la parte de texto del ComboBoxcontrol.

Mi búsqueda inicial en Google de esto resultó en una sugerencia demasiado compleja y equivocada para capturar el KeyPressevento.

Cory Engebretson
fuente

Respuestas:

378

Para que la parte de texto de un ComboBox no sea editable, establezca la propiedad DropDownStyle en "DropDownList". El ComboBox ahora es esencialmente de solo selección para el usuario. Puede hacer esto en el diseñador de Visual Studio, o en C # así:

stateComboBox.DropDownStyle = ComboBoxStyle.DropDownList;

Enlace a la documentación de la propiedad ComboBox DropDownStyle en MSDN.

Cory Engebretson
fuente
8
Una cosa a tener en cuenta al hacer esto significa que ya no puede actualizar la Textpropiedad programáticamente, estaba usándola para mostrar un mensaje predeterminado usandoComboBox.SelectedIndex = -1;
Lankymart
¿Hay alguna manera de hacer esto a través de la GUI para Visual C # sin tener que editarlo en el código? Parece como un 'valor predeterminado' sería una cosa normal que se quiera configurar
muzzlator
66
¿Cómo evito la apariencia gris?
Anders Lindén
2
@ AndersLindén estableció la propiedad FlatStyle en Flat.
Xam
@ Xam Entonces, ¿a dónde va la frontera? Cuando busco un poco en Google, parece que tengo que hacer el dibujo para que se vea aceptable.
Anders Lindén
67

Para agregar una referencia de GUI de Visual Studio, puede encontrar las DropDownStyleopciones en las Propiedades del ComboBox seleccionado:

ingrese la descripción de la imagen aquí

Lo que agregará automáticamente la línea mencionada en la primera respuesta al Form.Designer.cs InitializeComponent(), así:

this.comboBoxBatch.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
invertigo
fuente
33

Permanezca en su ComboBox y busque la propiedad DropDropStyle desde la ventana de propiedades y luego elija DropDownList .

Lzara
fuente
2

COMBOBOXID.DropDownStyle = ComboBoxStyle.DropDownList;

Abhishek Jaiswal
fuente
1

Para continuar mostrando datos en la entrada después de seleccionar, hazlo:

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;
}
Diogo Rodrigues
fuente