Dans un signalétique, positionner le focus sur un champ au choix après filtrage

0000002224     -      21/02/2014

Cette programmation montre comment exécuter du code après le filtrage dans un signalétique. L'exemple est fait pour le signalétique des clients et permet de positionner le focus sur un champ au choix (C_NOM dans notre exemple). Le code est construit sur base d'un customizer SigCli implémentant l'interface MercatorUi.ICustomizers.ISigCreated et exploitant l'évènement Filtered de la classe MercatorUi.Sig.Sig.

Il s'établit comme suit :

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using MercatorApi;
using MercatorUi;
using System.Windows.Forms;

namespace SigCli
{
    public class Customizer : MercatorUi.ICustomizers.ISigCreated
    {

        public void SigCreated(MercatorUi.Sig.Sig Sig) // Il faut redémarrer Mercator pour qu'il prenne en compte les modifications apportées au customizer via SigCreated.
        {
            Sig.Filtered += new MercatorUi.Sig.Sig.FilteredEventHandler(Sig_Filtered);
        }

        void Sig_Filtered(object sender, MercatorUi.Sig.Sig.FilteredEventArgs e)
        {
            List<Control> l = e.SigForm.FindMovableControlsBySource("C_NOM");
            if (l.Count > 0)
                _Divers.SuperFocus((MercatorUi.MovableControls.Interfaces.IMovableControl)l[0]);
        }
    }
}

Si on souhaite donner le focus à un objet plutôt qu'à un champ, il suffit de remplacer la ligne 20 par : (exemple pour les données de la carte fidélité)

Zoom
            List<Control> l = e.SigForm.FindMovableControlsByType(typeof(MercatorUi.Forms.Sig.SigObjects.CliFidel));