Comportamiento extraño de ComboBox en sistemas Windows

  1. 2 months ago

    Jose C

    Jul 13 Pre-Release Testers, Xojo Pro

    Tengo el siguiente problema con la versión 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 teoría (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, gráficamente se ve como hace el ciclo, es decir, refresca en cada iteración 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.

  2. Ivan T

    Jul 13 Pre-Release Testers

    Si estas asignando un valor a ListIndex es el comportamiento esperado, pero es difícil decir cual es el problema si no pones el código.

  3. Peter H

    Jul 14 Spain

    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)

  4. 8 weeks ago

    Jose C

    Jul 23 Pre-Release Testers, Xojo Pro

    @Ivan T : Creo que me faltó ese pequeño detalle del codigo y pensé que lo había puesto, ahí va:
    @Peter H : 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

  5. Ivan T

    Jul 23 Pre-Release Testers
    Edited 8 weeks ago

    Déjame decirte que tu código esta muy mal:

    -Usa las tag [ code ] para poner código 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 función, o al menos antes y después del For

    -Como mencione en el primer comentario, si le asignas un valor a listindex, es obvio que el valor seleccionado va a cambiar gráficamente también. Esa línea, ademas de cambiar el elemento seleccionado, no te sirve para nada, deberías quitarla.

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

      Aux.ListIndex = i
      If Aux.list(Aux.ListIndex) = texto Then
  6. Jose C

    Jul 23 Pre-Release Testers, Xojo Pro

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

  7. Jose C

    Jul 23 Pre-Release Testers, Xojo Pro

    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

  8. Ivan T

    Jul 23 Pre-Release Testers

    @Jose Cnbsp;Rodriguez If Aux.list(i) = texto Then

    Ya lo estas haciendo

    If Aux.list(i) = texto Then
  9. Jose C

    Jul 23 Pre-Release Testers, Xojo Pro
    Edited 8 weeks ago

    jajajaja, si, ya vi la tontería que hice, corregido XD, mil gracias, ya funcionó!

or Sign Up to reply!