//--------------------------------------------------------------------------- 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; }