Share via


Comment : utiliser les menus Smartphone

Mise à jour : novembre 2007

Pour se conformer à l'interface utilisateur Smartphone, le .NET Compact Framework met en vigueur les restrictions de menu suivantes :

  • Vous ne pouvez avoir que deux éléments de menu de niveau supérieur.

  • Seul le second élément de menu de niveau supérieur, sur le côté droit du formulaire, peut avoir des sous-menus.

Notez que le .NET Compact Framework ne met pas en vigueur ces restrictions au moment du design, mais lève une NotSupportedException au moment de l'exécution si votre code ne les suit pas.

Au moment de l'exécution, vous ne pouvez pas supprimer un élément de menu de niveau supérieur. Toutefois, vous pouvez affecter à la propriété Enabled d'un MenuItem une chaîne vide ("") pour rendre un élément de menu invisible.

Visual Studio ajoute automatiquement un composant MainMenu à votre formulaire lorsque vous créez des applications Smartphone et Pocket PC, mais il ne l'ajoute pas aux formulaires enfants. Le composant MainMenu fait fonctionner les touches programmables de Smartphone, mais vous ne pouvez pas programmer leurs fonctionnalités à moins que vous ne supprimiez le composant MainMenu du formulaire. Pour plus d'informations sur la programmation des touches programmables, consultez Using Smartphone Back Key et Soft Keys.

Pour associer une méthode à une sélection de menu, indiquez le code pour l'événement Click d'un MenuItem.

Exemple

Cet exemple définit un système de menus pour un scénario de sélection de plans :

  • Sur la gauche figure l'élément de menu Map Help qui possède un code de gestion des événements qui affiche un message.

  • Sur la droite figure l'élément de menu Maps qui a deux enfants : My Maps et Add and Remove. Ces enfants ont, respectivement, cinq et deux enfants.

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.");
        }
    }
}

Compilation du code

Cet exemple nécessite des références aux espaces de noms suivants :

Voir aussi

Autres ressources

Développement de SmartPhone et le .NET Compact Framework