2012-05-17 23 views
6

C# WinForms: utilicé un cuadro combinado con estas propiedades: DropDownStyle: desplegable AutoCompleteSource: ListItems AutoCompleteMode: SuggestAppendTener un cuadro combinado de Autocompletar que no permite el texto de encargo

por lo que ahora cuando escribo en cuadro combinado, se sugiere elementos de la lista de sus artículos. Bien. Pero el problema es que no quiero poder escribir lo que quiera, solo quiero poder escribir a partir de los elementos válidos que están en su lista. ¿Cómo puedo arreglar esta parte?

Gracias.

Respuesta

5

Habría que poblar las Artículos lista con sus valores (ya sea manualmente o por medio de enlace de datos), y luego configurar DropDownStyle a DropDownList.

El cuadro combinado no se verá como un cuadro de texto, pero cuando tenga el foco, al escribirlo se seleccionará automáticamente la mejor coincidencia de la lista de elementos.

(Esa es la forma recomendada para establecer un cuadro combinado para no permitir que el texto de encargo.)

Alternativamente, si desea el estilo para ser desplegable, capturar el evento KeyPress del control, y realizar una comprobación rápida del texto del control más e.KeyChar, y si no se encuentra en la lista, configure e.Handled = True. Esto bloqueará todas las pulsaciones de teclas que darían como resultado una palabra que no está en la lista.

+1

gracias pero eso no funciona. Sí, evitará que escriba lo que queramos, pero también romperá Autocompletar. Todavía podemos escribir pero SIEMPRE mostrará la lista completa y no los filtrará. – Bohn

+0

Se agregó otra solución. – MCattle

+0

buen truco, lo intentaré ahora. – Bohn

0

El control de cuadro combinado no es compatible con esto directamente.

Tendrá que escribir manejadores para verificar que se haya ingresado un elemento de la lista, y avisarle al usuario si no.

0

No es exactamente como autocompletar, pero si establece DropDownStyle en DropDownList, solo permitirá las entradas que están en la colección Elementos. Sin embargo, el comportamiento predeterminado de este modo es que cada letra que escribe salta a la primera coincidencia comenzando con esa letra. Por lo tanto, si desea permitirles que continúen escribiendo caracteres adicionales más allá de la primera letra, puede configurar AutoCompleteSource como ListItems y luego establecer AutoCompleteMode para que se agregue.

0

Otra opción podría estar registrándose en el evento TextChanged o TextUpdated y en caso de que el texto ya escrito no se ajuste a sus condiciones, cámbielo de manera adecuada.

1

Esto coincide con las cadenas en el cuadro combinado esto funciona.

int index = combobox1.FindString(combobox1.Text); 
    if (index < 0) 
    { 
    MessageBox.Show("Invalid Record"); 
    combobox1.Focus(); 
    return; 
    } 
Cuestiones relacionadas