versiones guia español descargar actualizar .net winforms validation combobox

.net - guia - ¿Utiliza la función Autocompletar de ComboBox, al tiempo que limita los valores a los de la lista?



qgis manual (9)

La forma en que lo he hecho es verificar el valor con la lista de valores posibles cuando salen de la caja y no dejar que dejen un valor no válido. No sé cómo te gustaría manejarlo cuando descubras que han ingresado un valor no válido, pero esto es lo que hice en el pasado.

En WinForms 2.0, un ComboBox tiene una característica de Autocompletar, que muestra una lista desplegable personalizada con solo los valores que comienzan con el texto ingresado.

Sin embargo, si quiero limitar los valores válidos solo a aquellos que aparecen en la lista de elementos de ComboBox, puedo hacerlo estableciendo DropDownStyle en DropDownList , lo que impide que el usuario ingrese un valor.

Sin embargo, ahora no puedo usar la función Autocompletar, que requiere la intervención del usuario.

¿Hay alguna otra manera de limitar la entrada a la lista, al mismo tiempo que permite el uso de la función Autocompletar? Tenga en cuenta que he visto algunas soluciones personalizadas para esto, pero realmente me gusta la forma en que se muestran los elementos correspondientes de autocompletado en una lista desplegable, y se ordenan aunque la lista original no lo esté.

EDITAR: He pensado simplemente en validar el valor ingresado, es decir, probar la entrada del usuario si es válida, por ejemplo, en el evento TextChanged o incluso usando el evento Validating . La pregunta es, entonces, ¿cuál es el comportamiento esperado? ¿Borro su valor (un valor vacío tampoco es válido) o uso un valor predeterminado? El valor de coincidencia más cercano?

¿Hay alguna otra etiqueta que pueda agregar a esta pregunta?


Puede conectar el evento de pulsación de tecla o de cambio de texto y validar que el texto ingresado fue una coincidencia de subcadena inicial para al menos uno de los elementos de la lista, rechazando la pulsación de tecla (o eliminando el carácter más reciente) si no es así. El único problema que se me ocurre con esto es que puede ser un poco confuso para el usuario que no se acepte alguna entrada (particularmente cuando se escribe el primer carácter, momento en el que la lista de autocompletar no estará visible, así que ganaron ''t saber qué valores válidos son).

O simplemente úselo en el modo de lista desplegable: las personas aún pueden escribir y saltará al primer elemento de la lista que coincida ...


Estaba buscando hacer lo mismo y encontré esta pregunta. Esto es lo que se me ocurrió.

Cree un controlador de eventos KeyDown para el cuadro combinado y busque una tecla Intro. Tenga en cuenta que, después de que el usuario acceda, ingrese el texto en el cuadro combinado seleccionado (como en, seleccionado como si estuviera realizando una operación de copiado o copiado) y el enfoque permanece en el cuadro combinado.

Si presionó Intro, llame a una función de validación que hará lo que considere necesario si el valor ingresado es bueno / malo.

Puede llamar a esta misma función en un controlador de eventos Leave para evitar que el usuario salga del cuadro combinado hasta que se realice una selección válida.

private void uxWidgetsComboBox_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { ValidateSelection(); } } private void uxWidgetsComboBox_Leave(object sender, EventArgs e) { if(!ValidateSelection()) { uxWidgetsComboBox.Focus(); } }

O algo por el estilo, pero entiendes la idea.


Puede establecer la propiedad "SuggestAppend SuggestAppend" y "AutoCompleteSource" en "ListItems" que enumerarán y agregarán los caracteres ingresados ​​en usted en la lista desplegable. Además, si no se selecciona, incluso el ValueMemeber correspondiente se seleccionará para el menú desplegable.


Puede ser tan simple como esto:

Private Sub cbx_Validating(ByVal sender As Object, _ ByVal e As System.ComponentModel.CancelEventArgs) _ Handles cbxZip.Validating, cbxCity.Validating, cbxCountry.Validating ''Prerequisites: object: combobox, style: dropdownlist, ''autocompletesource=listitems, autocompletemode<>none ''check if the typed value is in the list, else cancel ''if the value isn''t found, ''findstring'' will return -1 ''if cancel is set to True, one can''t leave the field e.Cancel = sender.FindStringExact(sender.Text) < 0 ''make it obvious to the user there is an issue If e.Cancel Then Beep() End Sub


Esta solución funcionó para mí:

Private Sub myComboBox_Validating(sender As System.Object, e As System.ComponentModel.CancelEventArgs) Handles myComboBox.Validating If Not myComboBox.Items.Contains(myComboBox.Text) Then MsgBox("Please select a value from the list", MsgBoxStyle.Exclamation, "Value not available") e.Cancel = True End If End Sub


Esto funcionó para mí. Utilicé una DataTable como fuente de datos

With cbo .AutoCompleteSource = AutoCompleteSource.ListItems .AutoCompleteMode = AutoCompleteMode.SuggestAppend End With Private Sub cbo_Validating(sender As System.Object, e As System.ComponentModel.CancelEventArgs) Handles cbo.Validating If cbo.SelectedItem Is Nothing Then MessageBox.Show("Value entered not valid", "Message", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) e.Cancel = True End If End Sub