textbox con autocompletar desde la tercera letra?

Iniciado por _CrisiS_, 9 Enero 2018, 01:18 AM

0 Miembros y 1 Visitante están viendo este tema.

_CrisiS_

Hola que tal , como le haria para que en un textbox al comenzar a escribir el apellido, apartir de la tercera letra que se digite, aparezca una lista desplegable  abajo con un max de  5 registros similares.

Serapis

#1
En el evento 'changed' compruebas la cantidad de caracteres que lleva escritos, si es igual o mayor que la cantidad deseada (3 en tu caso), buscas en una colección de textos que quieras buscar (se supone que es una colección que mantienes internamente o externamente) y extraes una subcolección que coincide con ese patrón, si la colección devuelta contiene al menos 1 elementos, lo cargas en una lista que haces emerger ('popup'), debajo del textbox (en general, aunque también vale bajo el cursor si no está muy alejado del textbox).
Si no se usa un método popup, todavia puede ser fácilmente imitado, con una objeto invible con un alto para 5 ítems (o los que tu quieras, si son muchos mejor una lista, para que tenga scroll, sin tene rque porveerlo tú), en tal caso, si el patrón del usuario devuelve entradas, las pegas al control que actúa de contenedor, lo posicionas bajo el textbox, en primer plano y lo haces visible. Luego cuando el usuario seleccione un ítem de la lista, lo copias al textbox y haces invisible la lista. Un banderín debiera indicar 'seleccionado', para luego desactivar ya mostrar la lista, mientras no se borre la entrada, o bien ocultarlo simplemente cuando no coincida el patrón (no se encuentre coincidencias), y cuando se pulse en un ítem de dicha lista. y si se vuelve a cambiar el contenido del textbox, nuevamente operar como se ha indicado...


Al caso un control 'ComboBox' ya hace todo eso por tí mismo, con la salvedad que muestra la lista completa que contiene... es decir avanza hasta el ítem coincidente con la entrada en la caja de texto, pero muestra todos, incluso aunque no coincidan. Pero vamos te ahorra mucho trabajo usarlo (con respecto a montarlo por tu cuenta como te comentaba en el párrafo anterior). Tu solo debes encargarte de mantener la lista que debe contener la parte de lista del combobox (por ejemplo los messes del año, y luego el usuario escribe 'm' en la caja de texto, se selecciona marzo, cuando avance a 'ma' todavía sigue en marzo, pero cuando avance a 'may' ya se selecciona mayo.

Otra diferencia de este control, respecto de lo que tu quieres es que la selección busca con cada carácter entrado, no es posible indicar como preciso x caracteres... podría desactivarse la parte de lista del combobox, hasta que tenga 3 caracteres, pero eso exige subclasificar o bien modificar la herencia del control, en ambos casos es mucho trabajo para tan poca cosa. Si requieres que sea así, mejor acometer lo señalado en el primer párrafo...

_CrisiS_

Eh llegado a realizarlo lo basico almenos con el autocompletado estandar, con las propiedades :AutoCompleteMode, AutocompleteSource. del  texbox.


Ahora tengo un problema como hago barra ese botón de la parte inferior redondeadao en su defecto evitar que se redimensione (cambie su tamaño con el mouse al hacerle clic) la lista

Eleкtro

#3
Cita de: _CrisiS_ en  9 Enero 2018, 04:41 AMcomo hago barra ese botón de la parte inferior redondeadao en su defecto evitar que se redimensione (cambie su tamaño con el mouse al hacerle clic)

Es así por diseño, no puedes configurar (no de forma administrada) ese comportamiento. Si consiguieras obtener el controlador de la ventana del menú de autocompletado, con el consiguiente P/Invoking a la APi de Windows que ello implicaria, entonces si podrías, pero no te merece la pena el esfuerzo...


Si realmente consideras necesario imposibilitar el redimensionado de la ventana de autocompletado, entonces en mi opinión sería mucho más factible que utilizases implementaciones de terceras personas... como por ejemplo podría ser esta de aquí abajo que al parecer no tiene ese grip para redimensionar la ventana:


Saludos.