Cómo: Utilizar los menús de Smartphone

Actualización: noviembre 2007

Para ajustarse a la interfaz de usuario de Smartphone, .NET Compact Framework impone las siguientes restricciones de menú:

  • Sólo es posible tener dos elementos de menú de nivel superior.

  • Sólo puede tener submenús el segundo de los elementos de menú de nivel superior, situado a la derecha del formulario.

Tenga en cuenta que .NET Compact Framework no impone estas restricciones en tiempo de diseño, sino que produce NotSupportedException en tiempo de ejecución si el código no las respeta.

Un elemento de menú de nivel superior no se puede eliminar en tiempo de ejecución. Sin embargo, se puede establecer una cadena vacía ("") para la propiedad Enabled de MenuItem, de modo que el elemento de menú sea invisible.

Cuando se crean aplicaciones de Smartphone y Pocket PC, Visual Studio agrega automáticamente un componente MainMenu al formulario, pero no a los formularios secundarios. El componente MainMenu acciona las teclas programables de Smartphone, pero no se puede programar su funcionalidad a menos que quite el componente MainMenu del formulario. Para obtener más información sobre cómo programar las teclas programables, vea Using Smartphone Back Key and Soft Keys.

Para asociar un método a una selección de menú, proporcione el código correspondiente al evento Click para MenuItem.

Ejemplo

Este ejemplo define un sistema de menús para un escenario de selección de mapas:

  • A la izquierda se encuentra el elemento de menú Map Help, cuyo código de control de eventos muestra un cuadro de mensaje.

  • A la derecha se encuentra el elemento de menú Maps, con dos elementos secundarios: My Maps y Add and Remove. A su vez, estos elementos secundarios tienen cinco y dos elementos secundarios, respectivamente.

Imports System
Imports System.Windows.Forms

Public Class Form1
    Inherits System.Windows.Forms.Form
    Friend WithEvents MainMenu1 As System.Windows.Forms.MainMenu
    Private WithEvents mi1 As New MenuItem
    Private mi2 As New MenuItem
    Private miChildA As New MenuItem
    Private miChildB As New MenuItem
    Private WithEvents miGrandChildA1 As New MenuItem
    Private WithEvents miGrandChildA2 As New MenuItem
    Private WithEvents miGrandChildA3 As New MenuItem
    Private WithEvents miGrandChildA4 As New MenuItem
    Private WithEvents miGrandChildA5 As New MenuItem
    Private WithEvents miGrandChildB1 As New MenuItem
    Private WithEvents miGrandChildB2 As New MenuItem

    Public Sub New()
        MyBase.New()

        InitializeComponent()

        'Define and add menu items.
        MainMenu1.MenuItems.Add(mi1)
        MainMenu1.MenuItems.Add(mi2)
        mi2.MenuItems.Add(miChildA)
        mi2.MenuItems.Add(miChildB)
        miChildA.MenuItems.Add(miGrandChildA1)
        miChildA.MenuItems.Add(miGrandChildA2)
        miChildA.MenuItems.Add(miGrandChildA3)
        miChildA.MenuItems.Add(miGrandChildA4)
        miChildA.MenuItems.Add(miGrandChildA5)
        miChildB.MenuItems.Add(miGrandChildB1)
        miChildB.MenuItems.Add(miGrandChildB2)
        mi1.Text = "Map Help"
        mi2.Text = "Maps"
        miChildA.Text = "My Maps"
        miChildB.Text = "Add and remove"
        miGrandChildA1.Text = "Manhattan"
        miGrandChildA2.Text = "Bronx"
        miGrandChildA3.Text = "Brooklyn"
        miGrandChildA4.Text = "Queens"
        miGrandChildA5.Text = "Staten Island"
        miGrandChildB1.Text = "Add map"
        miGrandChildB2.Text = "Delete map"

    End Sub

    Public Shared Sub Main()
        Application.Run(New Form1)
    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        MyBase.Dispose(disposing)
    End Sub

    Private Sub InitializeComponent()
        Me.MainMenu1 = New System.Windows.Forms.MainMenu()
        Me.Menu = Me.MainMenu1
        Me.Text = "Form1"
    End Sub

    ' The following subroutine handles the 
    ' Click event for the mi1 MenuItem.
    Private Sub mi1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mi1.Click
        MessageBox.Show("This is just a test.")
    End Sub

End Class
using System;
using System.Windows.Forms;

namespace SmartphoneMenus
{
    public class Form1 : System.Windows.Forms.Form
    {
        private System.Windows.Forms.MainMenu mainMenu1;

        private MenuItem mi1 = new MenuItem();
        private MenuItem mi2 = new MenuItem();
        private MenuItem miChildA = new MenuItem();
        private MenuItem miChildB = new MenuItem();
        private MenuItem miGrandChildA1 = new MenuItem();
        private MenuItem miGrandChildA2 = new MenuItem();
        private MenuItem miGrandChildA3 = new MenuItem();
        private MenuItem miGrandChildA4 = new MenuItem();
        private MenuItem miGrandChildA5 = new MenuItem();
        private MenuItem miGrandChildB1 = new MenuItem();
        private MenuItem miGrandChildB2 = new MenuItem();

        public Form1()
        {
            InitializeComponent();


            mainMenu1.MenuItems.Add(mi1);
            mainMenu1.MenuItems.Add(mi2);
            mi2.MenuItems.Add(miChildA);
            mi2.MenuItems.Add(miChildB);
            miChildA.MenuItems.Add(miGrandChildA1);
            miChildA.MenuItems.Add(miGrandChildA2);
            miChildA.MenuItems.Add(miGrandChildA3);
            miChildA.MenuItems.Add(miGrandChildA4);
            miChildA.MenuItems.Add(miGrandChildA5);
            miChildB.MenuItems.Add(miGrandChildB1);
            miChildB.MenuItems.Add(miGrandChildB2);

            // Event handler for the top left menu.
            mi1.Click +=new EventHandler(mi1_Click);

           // Event handlers for grandchild menu items. This code is commented out
           // because this example does not define their event handling methods.
            // miGrandChildA1.Click +=new EventHandler(miGrandChildA1_Click);
            // miGrandChildB1.Click +=new EventHandler(miGrandChildB1_Click);
            // miGrandChildB2.Click +=new EventHandler(miGrandChildB2_Click);
            mi1.Text = "Map Help";
            mi2.Text = "Maps";
            miChildA.Text = "My Maps";
            miChildB.Text = "Add and remove";
            miGrandChildA1.Text = "Manhattan";
            miGrandChildA2.Text = "Bronx";
            miGrandChildA3.Text = "Brooklyn";
            miGrandChildA4.Text = "Queens";
            miGrandChildA5.Text = "Staten Island";
            miGrandChildB1.Text = "Add map";
            miGrandChildB2.Text = "Remove map";

        }
        protected override void Dispose( bool disposing )
        {
            base.Dispose( disposing );
        }

        private void InitializeComponent()
        {
            this.mainMenu1 = new System.Windows.Forms.MainMenu();
            this.Menu = this.mainMenu1;
            this.Text = "Form1";

        }

        static void Main()
        {
            Application.Run(new Form1());
        }

        // The following method handles the
        // Click event for the mi1 MenuItem.
        private void mi1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("This is just a test.");
        }
    }
}

Compilar el código

Para este ejemplo se requieren referencias a los siguientes espacios de nombres:

Vea también

Otros recursos

Desarrollo de Smartphone y .NET Compact Framework