Mantener abierto contextmenu al usar CheckOnClick
Cuando presionamos sobre un ToolStripMenuItem convertido a un “checkbox” usando la propiedad CheckOnClick, el contextMenu se cierra aunque el elemento en cuestión se queda marcado/desmarcado, para hacer que esto no suceda, vamos a “simular” que se queda abierto con el siguiente código.
public NombreForm(){ tratarChecks(contextMenuStrip); } void tratarChecks(Object padre) { if (typeof(ContextMenuStrip).IsInstanceOfType(padre)) { ContextMenuStrip menuItem = (ContextMenuStrip)padre; foreach (ToolStripItem elemento in menuItem.Items) { if (typeof(ToolStripMenuItem).IsInstanceOfType(elemento)) { if (((ToolStripMenuItem)elemento).CheckOnClick) { ((ToolStripMenuItem)elemento).Click += controlarChecks; } } tratarChecks(elemento); } } if (typeof(ToolStripMenuItem).IsInstanceOfType(padre)) { ToolStripMenuItem menuItem = (ToolStripMenuItem)padre; foreach (ToolStripItem elemento in menuItem.DropDownItems) { if (typeof(ToolStripMenuItem).IsInstanceOfType(elemento)) { if (((ToolStripMenuItem)elemento).CheckOnClick) { ((ToolStripMenuItem)elemento).Click += controlarChecks; } } tratarChecks(elemento); } } } void controlarChecks(object sender, EventArgs e) { contextMenuStrip.Show(); ((ToolStripMenuItem)sender).GetCurrentParent().Visible = true; }
Código creado por: https://programacionextrema.es/
