visual posicion eventos evento c# winforms menu menuitem mouseleave

c# - posicion - mousemove visual basic



Cerrar el menĂº de WinformStrip cuando el mouse sale del contenedor (1)

He estado lidiando con este problema todo el día. Tengo un menustrip con varios elementos de menú. Cada artículo, también tiene muchos artículos. Ahora, si hago clic en el elemento del menú principal, un contenedor (similar al menú contextual) permanece abierto hasta que haga clic en otro sitio.

En el ejemplo de la imagen, "Clientes" será el elemento principal, y ahí está el "contenedor" con sus elementos de menú secundarios.

Lo que quería hacer es cerrar ese "contenedor" cuando el mouse deja el elemento principal o el área del contenedor. No quiero tener que hacer clic en ninguna otra parte del formulario para cerrarlo. Cuando digo eso, es porque realmente estoy usando botones WPF y tengo que hacerlo de esta manera.

Necesito ayuda aquí, espero que alguien me pueda dar algunos consejos.

Traté de usar el evento MouseLeave de los elementos de los padres ("Clientes", etc.) y allí lo hice:

private void clientesToolStripMenuItem_MouseLeave(object sender, EventArgs e) { clientesToolStripMenuItem.DropDown.Close(); }

Esto funciona, pero obviamente, cierra el padre y también el contenedor, cuando el mouse sale del menú "Clientes". Necesito una forma de saber si el mouse está sobre el elemento de menú padre o sobre uno de sus hijos para cerrarlo si sé que el mouse está en otro lugar.

Espero que alguien pueda ayudarme.


Puede lograrlo manejando los eventos de clientesToolStripMenuItem en sí. Cuando el mouse ingrese en el rectángulo de menú principal de sus clientes, solo muestre su contenedor y escóndalo cuando salga de este rectángulo. Suponiendo que picContainer es tu rectángulo, puedes hacer algo como esto:

private void clientToolStripMenuItem_MouseEnter(object sender, EventArgs e) { picContainer.Location = clientToolStripMenuItem.ContentRectangle.Location; picContainer.Show(); } private void clientToolStripMenuItem_MouseLeave(object sender, EventArgs e) { this.picContainer.Hide(); }