Ejemplo n.º 1
0
        /// <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);
            }
        }
Ejemplo n.º 3
0
        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);
        }