volver al índice de vb.net

Menús en Visual Basic .NET

Cómo crear menús en tiempo de diseño
Cómo crear menús en tiempo de ejecución y asignarles procedimientos de eventos



Actualizado el 13/Nov/2001

 

Hay dos formas de crear menús en Visual Basic .NET:

  1. En tiempo de diseño (al crear el formulario, antes de crear el ejecutable).
  2. En tiempo de ejecución, una vez que el ejecutable está funcionando.

Crear menús en tiempo de diseño:

En el primer caso necesitamos añadir "control" MainMenu de la barra de herramientas.
Cuando se pulsa en el control añadido, podemos editar los distintos menús que dispondremos.
La verdad es que al principio puede parecer un poco complicada la forma de crear los menús, pero al final acaba uno por acostumbrarse... sobre todo si sabes algunos "trucos" para no perder la paciencia...

Vamos a empezar desde el principio:
Crea un nuevo formulario, añade un MainMenu de la barra de herramientas, selecciona el icono que estará debajo del formulario y tendrás algo parecido a esto:


Figura 1

Para añadir nuevos elementos, tendrás que escribir en el recuadro en el que se muestra el texto: "Escriba aquí".
Por tanto, vamos a hacer caso a lo que nos dice ese mensaje y escribamos "allí".
Cuando escribes en el sitio ese del menú, verás que se muestran distintas posibilidades:


Figura 2

Puedes escribir a la derecha, para crear otro menú principal;, debajo, para poder añadir submenús, etc. Creo que es bastante intuitivo. Lo que ahí escribas, será lo que se muestre.
Pero, a los menús, además de darles un texto a mostrar, se le puede dar un nombre, el cual usaremos para interceptar los eventos... por ejemplo, para saber cuando se pulsa en uno de ellos.
Los nombres de los menús podemos dárselos si seleccionamos el menú en cuestión y después cambiamos el nombre en la ventana de propiedades, en esa misma ventana de propiedades podemos cambiar el texto a mostrar.
Lo habitual sería escribir los textos de los distintos menús y después asignar los nombres de esos menús.

Aunque existe otra forma de hacerlo:
Si pulsas con el botón derecho del ratón, se mostrarán las distintas opciones que tenemos al trabajar con los menús:


Figura 3

Entre ellas la que se muestra resaltada en la Figura 2: "Editar nombres".
Esta opción se puede poner y quitar, de forma que permita editar los nombres de los menús o no.
Cuando está seleccionada la opción de Editar nombres, el aspecto de los menús será el mostrado en la figura 4:


Figura 4

Es decir, se podrán modificar tanto los nombres de los menús como el texto que se mostrará en ellos.

También con ese menú de opciones se pueden insertar nuevos menús, separadores, etc.

Bien, ya sabes cómo añadir menús a los formularios en tiempo de diseño.
Ahora vamos a ver cómo añadir eventos a esos menús, también en tiempo de diseño.

Para añadir eventos a cualquier control del formulario, e incluso al propio formulario, muestra el código del formulario y de la lista desplegable de la izquierda, selecciona el "control" al que quieres añadir un evento, en este ejemplo, selecciona mnuSaludar. De la lista desplegable de la derecha, selecciona el evento que quieres interceptar, en nuestro caso el evento Click (que es el que se lanza cuando se pulsa en el menú).


Figura 5

Y nos mostraría el procedimiento a usar cuando se haga click en él:

Private Sub mnuSaludar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles mnuSaludar.Click

End Sub

Una vez que tengamos el procedimiento, escribiremos lo que queramos hacer, por ejemplo, si queremos mostrar un mensaje de salutación:
MessageBox.Show("Hola")

Y con el resto de los menús procederemos de la misma forma.

También se puede ir al evento del menú, haciendo dobleclick en el menú, (lo mismo que ocurre con el resto de los controles), pero te lo he explicado de esta forma, para que sepas cómo poder añadir otros eventos además del predeterminado; por ejemplo el evento Select, el cual se produce cuando se selecciona un menú, útil para mostrar un mensaje en una etiqueta o en un StatusBar...

 

Crear menús en tiempo de ejecución:

En el caso de que necesitemos crear los menús al vuelo... es decir, sin tener que hacerlo en tiempo de diseño, o bien si queremos añadir nuevos menús  a los que hemos diseñado, podemos hacerlo cuando el formulario se está ejecutando. Aunque lo que hay que tener claro es que el o los procedimientos a usar, deben estar creados antes... podemos crear los menús en tiempo de ejecución, pero no el código a usar... ése hay que tenerlo previsto... incluso aunque sólo usemos un procedimiento para todos los menús.
Vamos a ver cómo hacerlo.

Vamos a partir de la base de que NO tenemos ningún menú creado en tiempo de diseño y que tampoco hemos añadido el "control" MainMenu.
Como todo lo que se maneja en vb.NET depende del .NET Framework, vamos a crear una variable del tipo MainMenu para poder añadir nuevos menús a nuestro formulario.
Después, en el evento Form_Load, añadiremos varias opciones al menú y le indicaremos qué procedimientos usar cuando se haga click en dichos menús.
Como ya te he comentado, necesitamos crear un procedimiento que se ejecute cuando se haga click en los distintos menús. En este caso vamos a crear sólo uno y en él, según el menú seleccionado, haremos una cosa u otra.
En este ejemplo, vamos a mostrar el mensaje de saludo y cerrar el formulario.
Las opciones del menú serán: Saludar y Salir, (igual que en el ejemplo anterior).

Primero, declaramos una variable del tipo MainMenu, esto lo podemos hacer al principio del formulario:


Public Class Form4
    Inherits System.Windows.Forms.Form
    Private mMenu As New System.Windows.Forms.MainMenu()

Después tenemos que añadir los menús, aunque antes hay que indicarle al Visual Basic cual será el menú a usar en el formulario... sin esto, no se mostrarán los menús. Todo esto podemos hacerlo en el evento Load del formulario, (para mostrar el procedimiento de este evento, podemos hacerlo haciendo doble-click en el formulario.

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ' Creamos los menús a usar
    Me.Menu = mMenu
    With mMenu.MenuItems.Add("mnuFichero")
        .Text = "&Fichero"
        With .MenuItems.Add("mnuHola", New EventHandler(AddressOf mnuHola_Click))
            .Text = "Saludar"
        End With
        ' Un separador
        With .MenuItems.Add("mnuSep")
            .Text = "-"
        End With
        ' Para salir, usamos el mismo evento que el del botón salir
        With .MenuItems.Add("mnuSalir", New EventHandler(AddressOf mnuHola_Click))
            .Text = "Salir"
        End With
    End With
End Sub

De esta forma, añadimos los menús y le asignamos el procedimiento o los procedimientos a usar cuando se produzca el evento click. En este caso he usado un mismo evento para dos de los menús, pero lo habitual sería usar uno para cada uno de los eventos.
En este caso, este sería el procedimiento a usar:

Private Sub mnuHola_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    Select Case CType(sender, MenuItem).Text
        Case "Saludar"
            MessageBox.Show("Hola")
        Case "Salir"
            Me.Close()
    End Select
End Sub

Fíjate que al ser un procedimiento genérico, no habría que usar la palabra Handles después del nombre del procedimiento, entre otras cosas, porque no podríamos hacerlo, ya que no existen en tiempo de diseño los menús que queremos interceptar. Por otro lado, al usar el New EventHandler(AdressOf ... le estamos diciendo cual es el procedimiento que queremos que se ejecute al hacer click en dicho menú... para saber un poco más... échale un vistazo a la ayuda...

Por último decirte que, al no estar creados en tiempo de diseño, el Visual no reserva el espacio que ocupará el menú, por tanto puede ser que te encuentres que los controles "están fuera de lugar".
Es decir, al ejecutarse el formulario y añadirse los menús, el formulario sigue siendo igual de alto que al diseñarlo, pero la barra de menús ocupa un espacio y los controles se desplazan hacia abajo...

Para que lo veas mejor, te muestro el formulario en tiempo de diseño y cuando se está ejecutando:
Fíjate en el botón, cuando se ejecuta está más abajo.


Figura 6.A

Figura 6.B

 

Y esto es todo... por ahora, sobre los menús en Visual Basic.NET

Nos vemos.
Guillermo


Ir al índice de vb.net

Índice de la sección dedicada a punto NET (en el Guille)

la Luna del Guille o... el Guille que está en la Luna... tanto monta...