Busqueda en un listbox con Visual Fox Pro 9

Daniel Vázquez Aguilera
28 de Enero del 2021

Hola:

Estoy trabajando con un formulario y necesito que al ir escribiendo en un textbox se vaya actualizando un listbox y me muestre las concidencias independientemente de donde se encuentre.

Es decir si tecleo la palabra Jose me muestre Jose, Josemaria, Maria Jose, etc. 

Los datos estan en una tabla dbf de Visual Fox Pro.

De antemano muchas gracias.

 

Saludos


David Carrero
12 de Agosto del 2026

Hola,

Necesitas dos cosas: que el evento del textbox se dispare en cada tecla (no solo al perder el foco), y un filtro que busque la coincidencia en cualquier parte del texto, no solo al principio. En Visual FoxPro, el evento InteractiveChange del textbox es justo el que se dispara con cada pulsación:

*** Evento InteractiveChange del Text1
LOCAL lcBusqueda
lcBusqueda = ALLTRIM(THIS.Value)

IF EMPTY(lcBusqueda)
    THISFORM.List1.RowSource = "tu_tabla"
ELSE
    SELECT * FROM tu_tabla WHERE "<<lcBusqueda>>" $ UPPER(campo_nombre) ;
        INTO CURSOR cursor_filtrado READWRITE
    THISFORM.List1.RowSource = "cursor_filtrado"
ENDIF

THISFORM.List1.Requery()
THISFORM.List1.Refresh()

El operador $ en FoxPro comprueba si una cadena está contenida dentro de otra, en cualquier posición, que es justo lo que pides con tu ejemplo («Jose» debe encontrar tanto «Jose» como «Josemaria» y «Maria Jose»). Envuelvo la comparación en UPPER() para que la búsqueda no distinga mayúsculas de minúsculas.

Un detalle importante para que esto no vaya lento con tablas grandes: como se ejecuta en cada pulsación, si tu tabla DBF tiene muchos registros, considera aplicar un pequeño retardo (por ejemplo con un Timer que se reinicia en cada tecla y solo lanza la búsqueda cuando el usuario deja de escribir un instante) en vez de relanzar la consulta en cada carácter, exactamente el mismo patrón de «esperar a que pare de escribir» que se usa en búsquedas de este tipo en cualquier lenguaje.

David Carrero