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/


Navegación

Software de programación

Ayuda al servidor