Comportamiento extrao de ComboBox en sistemas Windows

Tengo el siguiente problema con la versin de Xojo para Windows:

He creado metodos para leer e ingresar datos a un combo box desde base de datos, en uno especificamente tengo el siguiente problema:

El combo es cargado en cada fila con un Combo.RowTag(i) = valor_numerico y Combo.List(i) = texto, como dice la teora (y eso lo hace bien) adicionalmente se queda un Combo.ListIndex a cada fila guardada dentro del combo, hasta ah no hay problema.

El detalle ocurre al momento de ejecutar una funcion que busca un Combo.ListIndex mediante el texto escrito (para el autocompletar), valla, el metodo funciona, localiza el listIndex, RowTag y List, sin embargo, grficamente se ve como hace el ciclo, es decir, refresca en cada iteracin el proceso de busqueda y hace parecer que el sistema se volvi loco hasta que encuentra el valor buscado.

Como comento, solo lo hace en Windows (32 y 64 bits), en Mac no produce ese comportamiento… alguna idea de como evitar el refresh del control?

Saludos a todos.

Si estas asignando un valor a ListIndex es el comportamiento esperado, pero es difcil decir cual es el problema si no pones el cdigo.

A ver si sirve …
ComboBox.Enabled = False
realizas la busqueda y una vez localizado lo que buscas…
ComboBox.Enabled = True
(y si no esta posicionado en el ListIndex que debe, lo posicionas directamente usando los valores que has pillado al buscar)

@Ivan Tellez : Creo que me faltó ese pequeño detalle del codigo y pensé que lo había puesto, ahí va:
@Peter Holm : Si hice lo que propones, pero es el mismo resultado, es curioso ese comportamiento.

Public Function BuscarTextoEnCombo(ByVal combo as ComboBox, texto as string) as Integer
Dim i As Integer
Dim s As String
Dim ret As Integer
Dim Aux As ComboBox

Aux = combo 'esto lo puse pensando en trabajar con una referencia adicional que no tocara el combo original
ret = 0
combo.refresh(False)
For i = 0 To Aux.ListCount - 1
#Pragma BackgroundTasks False
Aux.ListIndex = i
If Aux.list(i) = texto Then
ret = i
End If
#Pragma BackgroundTasks True
Next i
combo.refresh(True)
Return ret
End Function

Djame decirte que tu cdigo esta muy mal:

-Usa las tag [ code ] para poner cdigo en el foro.

-Si pones los #Pragma dentro del for, solo empeoras las cosas. Enciendes y apagas las cosas en cada uno de los ciclos, el punto es ponerlos al inicio y al final de la funcin, o al menos antes y despus del For

-Como mencione en el primer comentario, si le asignas un valor a listindex, es obvio que el valor seleccionado va a cambiar grficamente tambin. Esa lnea, ademas de cambiar el elemento seleccionado, no te sirve para nada, deberas quitarla.

Nota: Cambiar el listindex solo tendria caso si hicieras esto:

  Aux.ListIndex = i
  If Aux.list(Aux.ListIndex) = texto Then

Ahh bien, lo del #Pragma es de hoy, estaba haciendo pruebas ya que el tema es nuevo para mi :P, creo que ese pequeo detalle sobre “AUX.ListIndex = i” no lo vi de la forma adecuada, voy a revisarlo de inmediato, gracias por el consejo.

Vuelvo, entonces, eso no lo se, ¿como debo iterar entre los elementos del combo sin pasar por el listindex y por lo tanto sin que haga ese cambio “alocado” en sus elementos?, ese mismo procedimiento que puse (sin los #Pragma), lo corro en Mac y funciona sin hacer nada de ruido

Ya lo estas haciendo

If Aux.list(i) = texto Then

jajajaja, si, ya vi la tontera que hice, corregido XD, mil gracias, ya funcion!