Dans un bouton, ajouter un élément supplémentaire (ButtonItem) dans le déroulant

0000002333     -      29/03/2016

L'exemple illustré ici montre comment ajouter un élément ButtonItem à un bouton présent dans la partie inférieure d'une fenêtre. L'exemple est fait pour la fenêtre "Détails des domiciliations", mais le principe peut être appliqué à toute fenêtre avec ce type de bouton.

Le bouton est de type MercatorUi.BoutonsPro.ButtonXPro. On peut lui ajouter un ou plusieurs éléments qui seront de type MercatorUi.BoutonsPro.ButtonItemPro. La programmation repose sur un customizer Main qui va implémenter l'interface MercatorUi.ICustomizers.IExec afin d'intercepter l'évènement BaseFormCreating.

Ce buttonItem requiert 2 images. Une pour l'affichage dans le déroulant au format 16x16 pixels. L'autre, pour l'affichage dans le bouton parent au format 32x32 pixels. Pour rappel, une image peut être facilement chargée à partir d'un fichier sur disque à l'aide de System.Drawing.Image.FromFile(MercatorUi.Globals.MainDir + "...");

Le code de ce customizer est le suivant :

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

namespace Main
{
    public class Customizer : MercatorUi.ICustomizers.IExec
    {

        public void Main(MercatorUi.ICustomizers.ExecAction Action)
        {
            if (Action == MercatorUi.ICustomizers.ExecAction.DossierOpen)
            {
                Globals.Main.BaseFormCreating += new MercatorUi.Main.BaseFormCreatingEventHandler(Main_BaseFormCreating);
            }
            else if (Action == MercatorUi.ICustomizers.ExecAction.DossierClose)
            {
                Globals.Main.BaseFormCreating -= new MercatorUi.Main.BaseFormCreatingEventHandler(Main_BaseFormCreating);
            }
        }

        void Main_BaseFormCreating(object sender, MercatorUi.Main.BaseFormCreatingEventArgs e)
        {
            if (e.Form.GetType() == typeof(MercatorUi.Forms.Accounting.AccountingBankDomicilForm))
            {
                e.Form.Shown += new EventHandler(Form_Shown);
                e.Form.FormClosed += new FormClosedEventHandler(Form_FormClosed);
            }
        }

        void Form_Shown(object sender, EventArgs e)
        {
            MercatorUi.Forms.Accounting.AccountingBankDomicilForm accountingBankDomicilForm = (MercatorUi.Forms.Accounting.AccountingBankDomicilForm)sender;
            accountingBankDomicilForm.Shown -= new EventHandler(Form_Shown); // désinscrire l'évènement
            MercatorUi.BoutonsPro.BleuPro bleuPro1 = (MercatorUi.BoutonsPro.BleuPro)accountingBankDomicilForm.Controls["bleuPro1"];
            MercatorUi.BoutonsPro.ButtonXPro buttonXProBrowsePieceliees = (MercatorUi.BoutonsPro.ButtonXPro)bleuPro1.Controls["buttonBrowsePieceliees"];

            MercatorUi.BoutonsPro.ButtonItemPro doSomeThing = new MercatorUi.BoutonsPro.ButtonItemPro();
            doSomeThing.Image = MercatorUi._Divers.ImageFromResource("xml16"); // image 16x16 pixels
            doSomeThing.Image32 = MercatorUi._Divers.ImageFromResource("xml32"); // image 32x32 pixels
            doSomeThing.Name = "doSomeThing";
            doSomeThing.Text = "Faire Qqch.";
            doSomeThing.TextE = "Do Something";
            doSomeThing.TextN = "Iets Doen";
            doSomeThing.Tag = accountingBankDomicilForm;
            doSomeThing.Execute += new MercatorUi.BoutonsPro.ButtonItemPro.ExecuteHandler(doSomeThing_Execute);
            buttonXProBrowsePieceliees.SubItems.Add(doSomeThing);
            
        }

        void Form_FormClosed(object sender, FormClosedEventArgs e)
        {
            MercatorUi.Forms.Accounting.AccountingBankDomicilForm accountingBankDomicilForm = (MercatorUi.Forms.Accounting.AccountingBankDomicilForm)sender;
            accountingBankDomicilForm.FormClosed -= new FormClosedEventHandler(Form_FormClosed);
            MercatorUi.BoutonsPro.BleuPro bleuPro1 = (MercatorUi.BoutonsPro.BleuPro)accountingBankDomicilForm.Controls["bleuPro1"];
            MercatorUi.BoutonsPro.ButtonXPro buttonXProBrowsePieceliees = (MercatorUi.BoutonsPro.ButtonXPro)bleuPro1.Controls["buttonBrowsePieceliees"];
            MercatorUi.BoutonsPro.ButtonItemPro doSomeThing = (MercatorUi.BoutonsPro.ButtonItemPro)buttonXProBrowsePieceliees.SubItems["doSomeThing"];
            doSomeThing.Execute -= new MercatorUi.BoutonsPro.ButtonItemPro.ExecuteHandler(doSomeThing_Execute);
        }

        
        void doSomeThing_Execute(object sender, EventArgs e)
        {
            MercatorUi.BoutonsPro.ButtonItemPro doSomeThing = (MercatorUi.BoutonsPro.ButtonItemPro)sender;
            MercatorUi.Forms.Accounting.AccountingBankDomicilForm accountingBankDomicilForm = (MercatorUi.Forms.Accounting.AccountingBankDomicilForm)doSomeThing.Tag;
            MercatorUi.Dialogs.Stop(accountingBankDomicilForm.Text);
        }

    }
}

Remarque : cette programmation ne s'applique pas aux boutons .net de la version legacy.