In meinem Beitrag zum Erstellen eines Ribbons in EPLAN, gab es mehrfach den Wunsch eigene Untermenüs zu definieren.
Das ist leider so nicht direkt möglich.
Ich habe ein Script gebaut, dass man per Befehl im Menüband aufrufen kann.
Befehlszeile:
PopUpMenu /Items:"Item 1;TestAction;Tooltip 1|Item 2;TestAction;Tooltip 2|Item 3;TestAction;Tooltip 3"
Es werden alle Menü-Einträge übergeben, mit Text;Action;Tooltip
. In meinem Beispiel drei.
using System.Windows.Forms; using Eplan.EplApi.ApplicationFramework; using Eplan.EplApi.Base; using Eplan.EplApi.Scripting; internal class PopUpMenu { [DeclareAction("PopUpMenu")] public bool ActionPopUpMenu(ActionCallingContext acc) { // Get items string itemsString = null; acc.GetParameter("Items", ref itemsString); if (string.IsNullOrEmpty(itemsString)) { return false; } ContextMenuStrip menu = new ContextMenuStrip(); var itemsSplit = itemsString.Split('|'); foreach (var itemSplit in itemsSplit) { var split = itemSplit.Split(';'); if (split.Length < 2) { new Decider().Decide(EnumDecisionType.eOkDecision, "Wrong parameter value.", "PopUpMenu", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK, "PopUpMenu", false, EnumDecisionIcon.eFATALERROR); return false; } // Create item ToolStripMenuItem menuItem = new ToolStripMenuItem(); string text = split[0]; menuItem.Text = text; // Action string action = split[1]; menuItem.Click += (sender, args) => { new CommandLineInterpreter().Execute(action); }; // Tooltip if (split.Length > 2) { string tooltipText = split[2]; menuItem.ToolTipText = tooltipText; } menu.Items.Add(menuItem); } menu.Show(Cursor.Position); return true; } [DeclareAction("TestAction")] public void ActionTest() { MessageBox.Show("Hello!"); } }
Very Ingenious! Thanks for sharing.
Danke für das schöne Beispiel Jonny.
Eine Frage habe ich dazu noch, kann man für die Items auch Icons vergeben oder geht das nur für das Menü selbst?
Danke.
Ja das würde gehen, allerdings nicht mit SVGs, wie es jetzt in EPLAN der Fall ist. Dem menu item kannst Du auch ein Bild mitgeben.
Ok, danke. Ich hatte es mit SVG’s versucht, das hat nicht geklappt. Dann wäre das auch geklärt.