¿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.

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.


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;

33

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



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;
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.