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 :