/// <summary> /// Creates a new instance of ToolStrip (Wrapped) /// </summary> /// <param name="toolbarList">Toolbar List of the Main Toolbar</param> /// <param name="toolbarId">Id of the Toolbar</param> /// <param name="style">Toolbar type</param> /// <returns>A new instance of the Toolbar (wrapped)</returns> public static ToolStripWrapper Add(this ToolbarsList toolbarList, string toolbarId, ToolbarHelper.ToolbarStyle style) { ToolStripWrapper toolbar = new ToolStripWrapper(toolbarId, toolbarList.ToolbarParent); toolbar.Dock = DockStyle.Top; toolbar.CaptionStyle = style; toolbarList.Add(toolbar); (toolbarList.ToolbarParent as ToolStripWrapper).Parent.Controls.Add(toolbar); //The Toolbar is inserted in the Controls of the Form return(toolbar); }
/// <summary> /// Shows or simulates a Context/Popup Menu according to the tool ID or ToolStripItem instance /// </summary> /// <param name="toolbar">Toolbar Instance</param> /// <param name="tool">Tool to get, can be instance of string</param> /// <param name="flags"></param> /// <param name="x">Position X</param> /// <param name="y">Position Y</param> public static void PopupMenu(this ToolStripWrapper toolbar, object tool, object flags = null, int x = 0, int y = 0) { string toolName = string.Empty; if (tool is String) { var toolFromToolbar = toolbar.Tools[Convert.ToString(tool)]; if (toolFromToolbar != null) { toolName = toolFromToolbar.Name; } } else if (tool is ToolStripItem) { toolName = (tool as ToolStripItem).Name; } var toolStripDropDown = toolbar.PopupMenus[toolName]; toolStripDropDown.Show(x == 0 && y == 0 ? Cursor.Position : new Point(x, y)); }
public static object GetRealOldValue(this ToolStripItem item, string property, object value) { object valueToReturn = value; if (property.Equals("Visible") || property.Equals("Enabled")) { ToolStripWrapper toolbarRoot = (item as ToolStripItemWrapper).ToolbarParent as ToolStripWrapper; if (toolbarRoot == null) { return(valueToReturn); } ToolStripItemWrapper itemInTools = toolbarRoot.Tools[item.Name]; if (itemInTools == null) { return(valueToReturn); } foreach (ToolStripWrapper toolbar in toolbarRoot.Toolbars) { if (toolbar.Items.ContainsKey(item.Name)) { if (property.Equals("Visible")) { valueToReturn = toolbar.Items[item.Name].Visible; break; } if (property.Equals("Enabled")) { valueToReturn = toolbar.Items[item.Name].Enabled; break; } } } } return(valueToReturn); }
/// <summary> /// Spread the change of the property in all instances ( tools of toolbar, tools of tools, tools of menu, popup menu etc) /// </summary> /// <param name="item">ToolStripItem instance</param> /// <param name="property">Name of the property to update</param> /// <param name="value">Value to update</param> /// <param name="excludeChangeInToolList">True to avoid updating in the instance(first parameter) because was updated previously</param> public static void SpreadChange(this ToolStripItem item, string property, object value, bool excludeChangeInToolList = false) { PropertyInfo prop = null; //Get the toolbar of the ToolStripItem ToolStripWrapper toolbarRoot = (item as ToolStripItemWrapper).ToolbarParent as ToolStripWrapper; if (toolbarRoot == null) { return; //No change needed } //Get the tool in the tools of toolbar ToolStripItemWrapper itemInTools = toolbarRoot.Tools[item.Name]; if (itemInTools == null) { return; //No change needed } //The property in the tools list of the toolbar is updated prop = itemInTools.GetType().GetProperty(property, BindingFlags.Public | BindingFlags.Instance); if (null != prop && prop.CanWrite && !excludeChangeInToolList) { prop.SetValue(itemInTools, value, null); } //Checks if the popupmenus collection was already reviewed. The popup menus collection is stored in the toolbar root ( the one defined in the designer ). Must be checked 1 time. bool popupMenuAlreadyChecked = false; //Then we need to get all instances of the ToolStripItem in the toolbars foreach (IToolbar toolbar in toolbarRoot.Toolbars) { //Get the tool in the toolbar items var itemInToolbar = (toolbar as ToolStrip).Items[item.Name]; if (itemInToolbar != null) { //The property is updated in the tool prop = itemInToolbar.GetType().GetProperty(property, BindingFlags.Public | BindingFlags.Instance); if (null != prop && prop.CanWrite) { prop.SetValue(itemInToolbar, value, null); } if (toolbar.ToolbarRoot != null && !popupMenuAlreadyChecked) { //Get the popup menus var popupMenus = toolbar.ToolbarRoot.PopupMenus; if (popupMenus.Count > 0) { //Iterate the popup menus of the control foreach (var popupMenu in popupMenus) { if (popupMenu.Value != null) { //If the key of the tool is present in the popup menus list if (popupMenu.Value.Items.ContainsKey(item.Name)) { //Get the Value of the PopupMenu and update its value in the list var itemInPopupMenu = popupMenu.Value.Items[item.Name]; prop = itemInPopupMenu.GetType().GetProperty(property, BindingFlags.Public | BindingFlags.Instance); if (null != prop && prop.CanWrite) { prop.SetValue(itemInPopupMenu, value, null); } } //Then we must update the GUI. For this we get the item in the toolbar items var menu = ((toolbar as ToolStrip).Items[popupMenu.Key.ToString()] as ToolStripDropDownButton); if (menu != null && menu.DropDownItems.ContainsKey(item.Name)) { //If the key is present in the dropdown items we must update the value as well var submenu = menu.DropDownItems[item.Name]; prop = submenu.GetType().GetProperty(property, BindingFlags.Public | BindingFlags.Instance); if (null != prop && prop.CanWrite) { prop.SetValue(submenu, value, null); } popupMenuAlreadyChecked = true; //The popup menus list was already reviewed } } } } } } } }