/// <summary> /// Extends BeginInvoke so that when a state object is not needed, null does not need to be passed. /// <example> /// toolstripdropdownclosingeventhandler.BeginInvoke(sender, e, callback); /// </example> /// </summary> public static IAsyncResult BeginInvoke(this ToolStripDropDownClosingEventHandler toolstripdropdownclosingeventhandler, Object sender, ToolStripDropDownClosingEventArgs e, AsyncCallback callback) { if (toolstripdropdownclosingeventhandler == null) { throw new ArgumentNullException("toolstripdropdownclosingeventhandler"); } return(toolstripdropdownclosingeventhandler.BeginInvoke(sender, e, callback, null)); }
protected virtual void OnClosing(ToolStripDropDownClosingEventArgs e) { ToolStripDropDownClosingEventHandler eh = (ToolStripDropDownClosingEventHandler)(Events [ClosingEvent]); if (eh != null) { eh(this, e); } }
public static void ShowMultiSelectMenu <T>(Point position, IEnumerable <Tuple <T, bool> > items, Action <List <T> > pickHandler) { List <Tuple <T, bool> > itemList = items?.OrderBy(item => item.Item1.ToString()).ToList(); if (itemList == null || !itemList.Any()) { return; } bool anyItemClicked = false; ContextMenuStrip contextMenu = new ContextMenuStrip(); ToolStripDropDownClosedEventHandler contextMenuClosedEventHandler = null; ToolStripDropDownClosingEventHandler contextMenuClosingEventHandler = null; ToolStripItemClickedEventHandler menuItemClickedEventHandler = null; contextMenuClosedEventHandler = (sender, e) => { contextMenu.Closed -= contextMenuClosedEventHandler; contextMenu.Closing -= contextMenuClosingEventHandler; contextMenu.ItemClicked -= menuItemClickedEventHandler; }; contextMenuClosingEventHandler = (sender, e) => { if (e.CloseReason == ToolStripDropDownCloseReason.ItemClicked) { e.Cancel = true; ((ToolStripDropDownMenu)sender).Invalidate(); } else if (anyItemClicked) { List <T> selectedItems = ((ToolStripDropDownMenu)sender).Items.Cast <ToolStripMenuItem>().Where(x => x.Checked).Select(x => (T)x.Tag).ToList(); pickHandler(selectedItems); } }; menuItemClickedEventHandler = (sender, e) => { ToolStripMenuItem clickedItem = (ToolStripMenuItem)e.ClickedItem; clickedItem.Checked = !clickedItem.Checked; anyItemClicked = true; }; contextMenu.Closed += contextMenuClosedEventHandler; contextMenu.Closing += contextMenuClosingEventHandler; contextMenu.ItemClicked += menuItemClickedEventHandler; itemList.ForEach(item => contextMenu.Items.Add(new ToolStripMenuItem(item.Item1.ToString()) { Tag = item.Item1, Checked = item.Item2 })); contextMenu.Show(position); }