Un menú es un componente común en aplicaciones Windows que permite organizar las opciones de una aplicación de forma jerárquica a través de opciones desplegables. Un menú está compuesto de opciones principales y secundarias, y cada opción se comporta como un control con propiedades como nombre, texto, habilitación y accesos directos. Los menús son útiles para organizar las opciones sin sobrecargar el formulario, aunque no se deben usar demasiados niveles para no confundir al usuario.
1. Diseño de menús<br />Descripción de un menú<br />Un menú es uno de los componentes más habituales en los programas Windows. Se basa en un<br />conjunto de opciones desplegables a partir de una serie de opciones principales, que permiten<br />organizar el acceso a las diferentes partes de la aplicación. A efectos de programación, cada opción de<br />menú es tratada y se maneja de la misma forma que cualquier control dentro del formulario.<br />Sin ser imprescindible su uso, si es útil a nivel organizativo, ya que evita la sobrecarga de controles en<br />el formulario. Hemos de tener en cuenta que si no incorporamos un menú, tendremos que utilizar otro<br />control, un botón de comando por ejemplo, por cada opción que queramos ejecutar dentro del<br />formulario, lo que ocupa más espacio y resulta menos estético, debido a la sobrecarga de controles que<br />se produciría dentro del formulario.<br />Lo anteriormente descrito se aplica en programas SDI, ya que si vamos a realizar un programa MDI, el<br />uso de un menú para la ventana principal de la aplicación resulta obligatorio, siendo la forma que tiene<br />la ventana MDI de invocar a las ventanas secundarias de la aplicación.<br />Características de un menú<br />Un menú está compuesto por un conjunto de opciones principales o nivel superior, que se disponen en<br />la parte más próxima al título del formulario. De cada opción del nivel principal, se despliega unconjunto de opciones o menú de nivel inferior dependientes del principal. A su vez, desde las opciones<br />de este segundo nivel se pueden seguir abriendo sucesivamente niveles más inferiores.<br />Aunque la posibilidad de desplegar varios niveles de menús es muy interesante, de forma que<br />podamos alcanzar un alto nivel de organización, no conviene, sin embargo, hacer un uso abusivo de<br />esta cualidad, ya que un usuario puede tomar un mal concepto de una aplicación que le obliga a<br />descender muchos niveles de menús para seleccionar una opción que es muy utilizada a lo largo de la<br />aplicación.<br />Propiedades de un control Menú<br />Puesto que una opción de menú se maneja como un control más del formulario, podemos afirmar que<br />una opción de menú es un objeto con sus propiedades y métodos. De las primeras vamos a ver una<br />descripción:<br />Name. Nombre del control.<br />Caption. Texto que muestra la opción.<br />Enabled. Valor lógico que habilita o deshabilita la opción. Cuando está deshabilitada, aparece<br />en gris y el usuario no puede seleccionarla.<br />Checked. Dato lógico que cuando es verdadero, muestra una marca en la opción de menú,<br />para informar al usuario de que esa opción está activada.<br />Visible. Si su valor es False, oculta la opción. Por defecto es True.<br />Index. Permite definir una opción como parte de un array de controles u opciones de menú.<br />Esta propiedad es útil para crear nuevas opciones de menú en tiempo de ejecución.<br />Shortcut. Contiene el valor de una tecla de método abreviado o acelerador de teclado, como<br />F5 o Ctrl+G. Cuando se define un acelerador, la combinación de teclas aparece junto a la<br />descripción del menú. La ventaja de un acelerador es que no necesitamos navegar a través de<br />las opciones del menú para llegar a una determinada. Si la que queremos tiene definido un<br />acelerador, tecleándolo lanzaremos directamente la opción de ese menú.<br />WindowList. En un formulario MDI, si damos el valor True a esta propiedad en una opción<br />de nivel superior, el programa creará de forma transparente al usuario un submenú con las<br />ventanas que tiene abiertas la aplicación, marcando la ventana activa.<br />En cuanto a métodos, el único disponible para el programador es Click(), que se dispara al seleccionar<br />el usuario una opción del menú. Aquí deberemos incluir el código que se ejecutará para la opción de<br />menú.<br />El Editor de menús<br />Para crear un menú en el formulario hemos de hacerlo usando la ventana de edición de menús, la cual<br />abrimos de una de las siguientes maneras:<br />Hacer clic con el botón derecho del ratón dentro del formulario, para visualizar el menú<br />contextual del mismo. Dentro de este menú tenemos una opción para abrir el editor de menús.<br />Pulsar el botón Editor de menús en la barra de herramientas de VB.<br />Seleccionar el menú Herramientas + Editor de menús de VB.<br />Usar la combinación de teclado Ctrl+E.<br />Al abrir el editor de menús por primera vez, obtenemos una ventana similar a la que aparece en la<br />figura 152<br />Los pasos para crear las opciones del menú son los siguientes:<br />Introducir el Caption o título de la opción, que es la cadena de caracteres que aparecerá en el<br />menú. Si deseamos que esta opción tenga una tecla de acceso rápido o hotkey, hemos de situar<br />el carácter & precediendo a la letra que queramos actúe como hotkey. De esta forma, la letra<br />aparecerá subrayada en tiempo de ejecución y podremos seleccionar la opción con la<br />combinación de teclado Alt+hotkey si pertenece al nivel principal. Si es una opción incluida<br />en un nivel inferior, debemos abrir primero el nivel y después pulsar la tecla de acceso rápido.<br />Asignar un valor a Name, que es el nombre del control, y nos servirá para hacer referencia a él<br />dentro del código.<br />En este punto podemos asignar a la opción algún tipo de variante: habilitarla, marcarla,<br />ocultarla, asignarle un acelerador de teclado o Shortcut, etc.<br />Completadas todas las propiedades de la opción, pulsamos Siguiente, con lo que pasará a la<br />parte inferior de la ventana, en la zona de opciones ya creadas<br />Un aspecto muy importante a tener en cuenta es el nivel en el que vamos a situar la opción. Si<br />deseamos que esté situada en un nivel inferior, hemos de hacer clic en el botón con la flecha a<br />la derecha y un grupo de puntos aparecerá en la zona de opciones indicando que esa opción es<br />de nivel inferior. Cuantos más grupos de puntos haya, mayor profundidad tendrá la opción. De<br />forma inversa, si queremos que una opción suba de nivel, hemos de hacer clic en el botón con<br />flecha a la izquierda. Si la opción no tiene puntos, es que pertenece al nivel principal.<br />Es posible cambiar la posición de una opción, haciendo clic en los botones con las flechas<br />arriba o abajo la desplazaremos en una u otra dirección.<br />Pulsando el botón Insertar crearemos una nueva opción vacía entre las opciones ya creadas.<br />Pulsando el botón Eliminar borraremos la opción actualmente resaltada.<br />Podemos agrupar diferentes opciones dentro de un mismo menú usando separadores o líneas<br />divisorias. Simplemente hemos de poner un guión quot;
-quot;
en el Caption de la opción de menú.<br />Añadir código a una opción de menú<br />Una vez terminado el diseño del menú, tenemos dos formas de incluir el código que debe ejecutar:<br />Desde la ventana de diseño del formulario, seleccionar la opción de menú, lo que abrirá la<br />ventana de código del formulario, situándonos en el método Click(), que como hemos visto<br />anteriormente es el único disponible para este control.<br />Abrir la ventana de código del formulario, y buscar nosotros directamente en la lista de<br />objetos el control a codificar.<br />Creación de un menú<br />Vamos a ver una aplicación que contenga un menú en el que sus opciones muestren las propiedades<br />descritas anteriormente.<br />Tomamos del grupo de ejemplos la aplicación llamada Menu. Una vez cargada en VB, abrimos su<br />único formulario frmMenu que dispone de la siguiente estructura de menú:<br />De la misma forma, se puede cambiar la marca de la opción Enviando correo, pulsando el botón<br />Enviar correo, lo vemos en el código fuente 171.<br />