ContainerSearchField

  1. last week

    Victor M

    Dec 4 Pre-Release Testers
    Edited last week

    Hola, amigos tengo el ContainerSearchField de Javier.

    Tengo una duda, alguien sabe como agregar el evento SefChange?

    Deseo utilizar El event Handler.. "SefChange" del campo searchField.text cuando estoy escribiendo en el, para cargar un método cuando detecte que se esta escribiendo.

    Agregué el Event Definition para que aparezca dentro del ContainerSearchField pero no se como enviarle la función o parámetro.

    Saludos.

    Hola Victor,

    He subido una nueva versión del control en el que está implementado tanto el mecanismo de Delegado como de Evento en el ContainerControl. En ambos casos la instancia puede recibir notificaciones de los cambios de texto realizados en el TextField. La diferencia fundamental es que el mecanismo de Delegado es dinámico, puesto que permite modificar el método llamado en tiempo de ejecución.

    Ten en cuenta que puedes implementar los mismos mecanismos para recibir cambios sobre otros eventos del TextField, como puedan ser SelChange:

    1. Como Evento: el TextField llama a un método del ContainerSearchField pasando los datos deseados -> el método lanza un evento (definido previamente), de modo que pueda ser implementado por la instancia de la clase.
    2. Como Delegado: El TextField comprueba que la propiedad de delegado correspondiente no esté a Nil y, en ese caso, lo invoca pasando los datos deseados.

    Puedes descargar el proyecto con el ContainerControl y ejemplo desde este enlace .

    Si necesitas alguna explicación sobre el funcionamiento del código, no dudes en preguntar. El uso de delegados y otras herramientas del lenguaje están recogidos en mi eBook "Programación Multiplataforma Xojo "

    Javier

  2. Javier M

    Dec 4 Pre-Release Testers, Xojo Pro AprendeXojo - Madrid, Spain

    Hola Victor,

    Ciertamente se puede hacer mediante definición de eventos. Ahora bien, te propongo la siguiente solución, que además te permitirá utilizarlo en combinación con autocompletado de texto y es más dinámico en tiempo de ejecución:

    1. Añade un Delegado a ContainerSearchField con la siguiente signatura:

    Delegate Name: callback
    Parameters: content as String
    Scope: Public

    2. Añade una Propiedad a ContainerSearchField con la siguiente signatura:

    Name: textChangeDelegate
    Type: callback
    Scope: Public

    En el evento TextChange del control searchField del ContainerSearchField, modifica el código para que sea:

     if me.Text <> "" then
        CloseButtonClean1.activate
        
      else
        
        CloseButtonClean1.deactivate
        
        if textChangeDelegate <> nil then textChangeDelegate.Invoke me.Text
        
      end

    3. Ahora, en el evento Open de la instancia del ContainerSearchField que añadas a la ventana, introduce la siguiente línea:

    me.textChangeDelegate = WeakAddressOf searchfieldchanges //este es el método que has de implementar para que sea invocado en cada cambio

    Con solo esto, el método registrado como delegado comenzará a recibir el contenido del TextField utilizado en el ContainerControl de búsquedas a medida que este se modifique.

    Si necesitas más aclaraciones… ya sabes! ;-)

    Javier

  3. Victor M

    Dec 4 Pre-Release Testers

    Excelente Javier.

    No etendi el paso 3, en la ventana que tengo asociado el ContainerSearchField no se como obtener el texto que se esta modificando y al mismo tiempo ejecutar el un método para que reciba el texto únicamente cuando estas realizando una escritura dentro del searchField como lo hace el selchange.

    Por ejemplo así.

    metodo_lista(ContainerSearchField.textChangeDelegate) dentro del selchange.

    Gracias por la respuesta anterior.

  4. Javier M

    Dec 4 Pre-Release Testers, Xojo Pro Answer AprendeXojo - Madrid, Spain
    Edited last week

    Hola Victor,

    He subido una nueva versión del control en el que está implementado tanto el mecanismo de Delegado como de Evento en el ContainerControl. En ambos casos la instancia puede recibir notificaciones de los cambios de texto realizados en el TextField. La diferencia fundamental es que el mecanismo de Delegado es dinámico, puesto que permite modificar el método llamado en tiempo de ejecución.

    Ten en cuenta que puedes implementar los mismos mecanismos para recibir cambios sobre otros eventos del TextField, como puedan ser SelChange:

    1. Como Evento: el TextField llama a un método del ContainerSearchField pasando los datos deseados -> el método lanza un evento (definido previamente), de modo que pueda ser implementado por la instancia de la clase.
    2. Como Delegado: El TextField comprueba que la propiedad de delegado correspondiente no esté a Nil y, en ese caso, lo invoca pasando los datos deseados.

    Puedes descargar el proyecto con el ContainerControl y ejemplo desde este enlace .

    Si necesitas alguna explicación sobre el funcionamiento del código, no dudes en preguntar. El uso de delegados y otras herramientas del lenguaje están recogidos en mi eBook "Programación Multiplataforma Xojo "

    Javier

  5. Victor M

    Dec 6 Pre-Release Testers

    Gracias javier, cuanto me cobras para que se agregar la función de auto completar a este mismo control de buscar, aparte también me interesa otro control tipo menu que contenga una búsqueda para mostrar los posibles resultados.
    Ejemplo:
    -image-

    Saludos.

  6. 7 days ago

    Javier M

    Dec 7 Pre-Release Testers, Xojo Pro AprendeXojo - Madrid, Spain

    Hola Victor,

    Te he contestado por mensaje privado.

    En cuanto al segundo control, y si es para Desktop… ¿en qué se diferenciaría de lo que puedes obtener con el ComboBox incluido de serie?

    Javier

or Sign Up to reply!