Пошаговое руководство. Использование меню Smartphone
Обновлен: Ноябрь 2007
Чтобы соответствовать пользовательскому интерфейсу смартфона, платформа .NET Compact Framework вводит следующие ограничения меню:
Разрешены только двухуровневые элементы меню.
Только у элементов меню второго уровня, расположенных в правой стороне формы, может быть подменю.
Обратите внимание, что платформа .NET Compact Framework не вводит эти ограничения во время разработки, но вызывает исключение NotSupportedException во время выполнения, если ваш код этим ограничениям не следует.
Во время выполнения нельзя удалить элемент меню верхнего уровня. Но можно установить свойство EnabledMenuItem равным пустой строке (""), чтобы сделать элемент меню невидимым.
Visual Studio автоматически добавляет компонент MainMenu в вашу форму, при создании приложений для карманного ПК и смартфона, но не добавляет его в дочерние формы. Компонент MainMenu работает с программируемыми клавишами смартфона, но нельзя программировать их функциональность без удаления компонента MainMenu из формы. Дополнительные сведения о программировании клавиш, см. в разделе "Использование клавиш возврата и программируемых клавиш смартфона".
Чтобы связать метод с выбором в меню, обеспечьте код события Click для MenuItem.
Пример
В этом примере определяется меню для выбора карт:
Слева находится элемент меню Map Help, которому сопоставлен обработчик событий, отображающий окно сообщения.
Справа находится элемент меню Maps, у которого два дочерних объекта: My Maps и Add and Remove. У этих объектов, в свою очередь, есть собственные дочерние объекты (пять и два соответственно).
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.");
}
}
}
Компиляция кода
Для этого примера требуются ссылки на следующие пространства имен:
См. также
Другие ресурсы
Разработка приложений для смартфонов и платформа .NET Compact Framework