| netlib.narod.ru | < Назад | Оглавление | Далее > |
Хотя проектирование меню таким образом, чтобы они были похожи на меню других Windows-программ, помогает пользователю ориентироваться в программе, так делать не обязательно. Иногда — скажем, в программе, которую вы пишете сами для себя, — нужен только один пункт меню. Отобразить тот факт, что пункт меню верхнего уровня не вызывает подменю, а выполняет некоторое действие, можно восклицательным знаком.
Следующая программа, являющаяся подклассом программы JeuDeTaquin из главы 10, содержит меню из одного пункта Scramble!:
JeuDeTaquinWithScramble.cs
//--------------------------------------------------------
// JeuDeTaquinWithScramble.cs (C) 2001 by Charles Petzold
//--------------------------------------------------------
using System;
using System.Drawing;
using System.Windows.Forms;
class JeuDeTaquinWithScramble: JeuDeTaquin
{
public new static void Main()
{
Application.Run(new JeuDeTaquinWithScramble());
}
public JeuDeTaquinWithScramble()
{
Menu = new MainMenu(new MenuItem[] {
new MenuItem("&Scramble!",
new EventHandler(MenuScrambleOnClick)) });
}
void MenuScrambleOnClick(object obj, EventArgs ea)
{
Randomize();
}
}
Теперь, чтобы перемешать мозаику, не обязательно завершать работу программы.
Одной из первых популярных программ, использующей визуальное иерархическое меню в текстовом режиме MS-DOS, была Lotus 1-2-3. Однако меню Lotus 1-2-3 не содержали всплывающих меню. Меню выводились в одной строке, и каждый следующий уровень меню заменял предыдущий.
В программе Windows Forms можно реализовать такое поведение, определив несколько объектов MainMenu и динамически присваивая эти объекты свойству Menu формы. Этот подход демонстрируется в следующей программе.
OldFashionedMenu.cs
//-------------------------------------------------
// OldFashionedMenu.cs (C) 2001 by Charles Petzold
//-------------------------------------------------
using System;
using System.Drawing;
using System.Windows.Forms;
class OldFashionedMenu: Form
{
MainMenu mmMain, mmFile, mmEdit;
public static void Main()
{
Application.Run(new OldFashionedMenu());
}
public OldFashionedMenu()
{
Text = "Old-Fashioned Menu";
EventHandler eh = new EventHandler(MenuOnClick);
mmMain = new MainMenu(new MenuItem[]
{
new MenuItem("MAIN:"),
new MenuItem("&File", new EventHandler(MenuFileOnClick)),
new MenuItem("&Edit", new EventHandler(MenuEditOnClick))
});
mmFile = new MainMenu(new MenuItem[]
{
new MenuItem("FILE:"),
new MenuItem("&New", eh),
new MenuItem("&Open...", eh),
new MenuItem("&Save", eh),
new MenuItem("Save &As...", eh),
new MenuItem("(&Main)", new EventHandler(MenuMainOnClick))
});
mmEdit = new MainMenu(new MenuItem[]
{
new MenuItem("EDIT:"),
new MenuItem("Cu&t", eh),
new MenuItem("&Copy", eh),
new MenuItem("&Paste", eh),
new MenuItem("De&lete", eh),
new MenuItem("(&Main)", new EventHandler(MenuMainOnClick))
});
Menu = mmMain;
}
void MenuMainOnClick(object obj, EventArgs ea)
{
Menu = mmMain;
}
void MenuFileOnClick(object obj, EventArgs ea)
{
Menu = mmFile;
}
void MenuEditOnClick(object obj, EventArgs ea)
{
Menu = mmEdit;
}
void MenuOnClick(object obj, EventArgs ea)
{
MessageBox.Show("Menu item clicked!", Text);
}
}
| netlib.narod.ru | < Назад | Оглавление | Далее > |