//---------------------------------------------------------------------------
        public CResultAErreur ExecuteAction(CActionSur2iLinkMenuDeroulant actionMenu, object sender, object objetCible)
        {
            CResultAErreur result = CResultAErreur.True;

            List <ToolStripItem> listeItems = new List <ToolStripItem>();

            foreach (IMenuItem item in actionMenu.ListeMenuItems)
            {
                bool bAdd = true;
                if (item.FormuleCondition != null)
                {
                    CContexteEvaluationExpression ctx = new CContexteEvaluationExpression(objetCible);
                    result = item.FormuleCondition.Eval(ctx);
                    if (result && !CUtilBool.BoolFromObject(result.Data))
                    {
                        bAdd = false;
                    }
                }
                if (bAdd)
                {
                    IExecuteurSpecifiqueActionMenuItem executeurSpecifique = null;
                    if (m_dicTypeActionExecuteur.TryGetValue(item.GetType(), out executeurSpecifique))
                    {
                        listeItems.AddRange(executeurSpecifique.GetItemsForContextMenuStrip(item, sender, objetCible));
                    }
                }
            }
            ContextMenuStrip menuDeroulant = new ContextMenuStrip();

            menuDeroulant.Items.Clear();
            menuDeroulant.Items.AddRange(listeItems.ToArray());
            if (menuDeroulant.Items.Count > 0)
            {
                /*if (sender != null)
                 *  menuDeroulant.Show((Control)sender, new Point(0, ((Control)sender).Height));
                 * else*/
                menuDeroulant.Show(Cursor.Position);
            }
            result.Data = listeItems.ToArray();
            return(result);
        }
 public static void RegisterExecuteurSpécifique(Type typeAction, IExecuteurSpecifiqueActionMenuItem executeurSpecifique)
 {
     m_dicTypeActionExecuteur[typeAction] = executeurSpecifique;
 }