26 noviembre 2006

Menus en Visual Basic .net y 2005

Hay dos tipos de menus que se pueden poner en aplicaciones hechos en Visual Basic .NET: el menú principal (MenuStrip) y el contextual (ContextMenuStrip). Como dijo Jack el destripador, vámonos por partes...
El menú principal es el que aparece en las aplicaciones abajo de la barra de la ventana (o sea, la tirita que dice "Archivo, Edición, etc."). Para crear uno, se tiene que arrastrar el objeto MenuStrip a la ventana. El ambiente de diseño cambia un poco: el "control" aparece en la parte inferior, fuera de la ventana y en la parte superior de la ventana (o forma) que estás creando, aparece una cajita que dice "Escriba aquí". La pantalla se ve algo así:


Al darle click sobre ese mensaje, te permite escribir un texto (el letrero del primer menú) y aparecen "huecos" para escribir más opciones.


Las siguientes imágenes muestran el efecto que tiene ir tecleando opciones del menú.


Visualmente quedó muy padre. Ahora, ¿qué hacemos? Programar las opciones se hace como con cualquier otro control. En este caso, le dí un doble click sobre la leyenda "Famous Star" y me aparece la ventana de código así:


Ya que solo es un ejemplo y no quiero complicarme la vida, solo voy a hacer que aparezca una ventana que diga lo que eligió, así que agrego el código que hace aparecer un MessageBox de la siguiente manera:


Al correr el programa y al seleccionar la hamburguesa "Famous Star", aparece esta ventana:


Fácil, ¿no? Ahora toca retar a un menu contextual a un duelo. Bueno, exageré. Pero de todos modos vamos a crear un menu contextual. Es muy similar al menú principal, con algunas pequeñas variantes que iré detallando. Para empezar, tenemos que añadir el control ContextMenuStrip a la ventana para que quede abajo de la ventana que estoy diseñando. Algo así:


Como observarás es casi idéntico que el menú principal, solo que aquí no puedes cambiar el texto ContextMenuStrip1. Ahora puedes escribir las diferentes opciones de la misma manera en que lo hice con el menú principal. A mí me quedó así:


No te vayas a sacar de onda: si le das click afuera de la ventana del menú contextual que aparece, desaparece. Para volverlo a abrir, haz un doble click sobre el ContextMenuStrip1 (suponiendo que no le has cambiado el nombre) que está abajo de la ventana.


Al hacerlo, vuelve a aparecer el menú para que puedas seguir trabajando en él.

Agregar código a las opciones del menú contextual es idéntico a la manera en que se agregan en el menú principal (cosa que ya expliqué más arriba). Pero para que funcione, tenemos que programar el momento en que queremos que aparezca ese menú. Lo más común es hacer aparecer un menú contextual al darle un click con el botón derecho del mouse. Así que hay que programar el evento MouseDown. Yo programé el evento MouseDown de una etiqueta (Label1) porque me interesa que abra cuando estoy sobre el label, pero si quieres que aparezca cuando le das click derecho sobre la ventana, pon este código bajo el evento MouseDown del Form.

Espero que se haya entendido porque lo estoy programando bajo Label1_MouseDown() y no bajo Form1_MouseDown() como probablemente harías en tu proyecto, así que ahora hay que decirle al programa que si el botón presionado es el derecho, que haga aparecer el menú contextual. Se supone que en otra parte ya programamos lo que va a hacer cada opción (de la misma manera en que lo hacíamos para las opciones del menú principal). Esto sería así:


¡Y ya! Usamos la función Show que sirve para mostrar el menú en las coordenadas dadas. En nuestro caso, le estamos pasando las coordenadas del lugar donde está el cursor de nuestro mouse (e.X y e.Y).

¡Hasta la próxima!

10 comentarios:

ricardo aaron dijo...

Un fraterno saludo. He leido su documento. Y lo he encontrado muy valioso. Me resuelve muchas, dudas.
El problema que he tenido es que al momento de unir los programas hechos en torno al MenuStrip. Estos me generan conflicto porque tienen en su mayoria form1. Estoy tratando de renombrarlos y me he demorado un poco en hacer esa tarea. Para poder ver funcionando el Menu que estoy haciendo.
Muchas Gracias

Anónimo dijo...

Excelente explicacion, muy didactico m sirvio de gran ayuda saludos

Unknown dijo...

hola tony ammm dos cosas ammm talvez tres.
1) te estoy siguendo en el twitter soy btza :)
2) me gusto la explicación
3) como le hago para guardar en el menu, o sea para guardar como....ñ.ñ ??

Anónimo dijo...

Buena explicacion y muy censilla ahora cualquierpersona puede arrastrar botones, cosas de niños... aunque seria genial que nos enseñaras codigo para guardar, abrir...etc gracias.

Tony Valderrama dijo...

Estimada Betzabé:

No entiendo exactamente a qué te refiers con Guardar en le menú. ¿Quieres decir hacer una función que guarde un archivo? ¿O si tienes que guardar el menú que estás haciendo en otro lado?

Si es guardar un archivo, depende del tipo de archivo y lo tienes que hacer "a pie". Si estás preocupada si el menú se guarda en otro lado, una vez que lo pones en tu ventana, es como cualquier otro control.

Espero haberte ayudado. Si no, explícame poquito mejor y con todo gusto intento echarte la mano.

¡Saludos!

Unknown dijo...

lo que pasa es que quiero hacer un menu que guarde los cambios que realizo en el documento que abri,

por ejemplo abrir un notepad, desde mi formulario y escribir algo y escoger la funcion de GuaRDaR CoMo ... y que los cambios que realice en el notepad se guarden.

como puedo hacer eso?

espero ser especifíca =)

Tony Valderrama dijo...

Ya entendí. Eso debe ser algo de la aplicación ue estáns haciendo, lo tienes que hacer desde cero.

Yo te sugeriría que usaras archivos de texto. Fíjate en este mensaje que escribí: http://tony-valderrama.blogspot.com/2006/12/generando-archivos-secuenciales-con.html

Espero ue te sea útil. ¡Saludos!

ERICK SOLANO dijo...

Estaba buscando justo eso pero para aplicarlo en c# visual studio, gracias viejo sigue así.

DanielX dijo...

Buen articulo gracias :)

Anónimo dijo...

Buen aporte :)

El Tony y sus ondas...

Related Posts Plugin for WordPress, Blogger...