Опубликован: 25.03.2010 | Уровень: для всех | Доступ: платный
Лекция 14:

Меню и панели инструментов

< Лекция 13 || Лекция 14 || Лекция 15 >
Аннотация: В данной лекции рассматривается одна из самых важных составляющих любого приложения - меню приложения.

Файлы к лекции Вы можете скачать здесь.

В библиотеке .NET Framework 2.0 появились три новых класса для организации меню ( Strip - полоса):

  1. System.Windows.Forms.MenuStrip - главное меню
  2. System.Windows.Forms.ToolStrip - панель инструментов
  3. System.Windows.Forms.StatusStrip - панель состояния

Наряду с этими новыми элементами существуют и поддерживаются прежние аналогичные классы, существующие в версиях .NET Framework 1.x:

  1. System.Windows.Forms.MainMenu
  2. System.Windows.Forms.ToolBar
  3. System.Windows.Forms.StatusBar

Обе группы классов, старые и новые, обладают почти равной функциональностью, но стиль редактирования в режиме дизайнера и возможности несколько отличается, как и наименования некоторых свойств и методов. Кроме того, новые классы являются более совершенными. Они поддерживают не только кнопки с растрами, но и текстовые поля, списки и выпадающие меню.

Рассмотрим простую программу в файле SimpleMenu.cs, имитирующую работу меню:

using System;
using System.Drawing;
using System.Windows.Forms;
    
namespace Test
{
    class SimpleMenu : Form
    {
        // Точка входа
        public static void Main()
        {
            Application.Run(new SimpleMenu());
        }
        
        // Конструктор
        SimpleMenu()
        {
            this.Text = "Простое меню";
    
            // Главное меню
            MenuStrip menu = new MenuStrip();
            this.Controls.Add(menu);
    
            // Раздел File
            ToolStripMenuItem itemFile = new ToolStripMenuItem();
            itemFile.Text = "&File";
            menu.Items.Add(itemFile);// Элемент верхнего уровня
    
            // Раздел Help
            ToolStripMenuItem itemHelp = new ToolStripMenuItem();
            itemHelp.Text = "&Help";
            menu.Items.Add(itemHelp);
    
            // Заполнение раздела File
            // Команда Open...
            ToolStripMenuItem itemOpen = new ToolStripMenuItem();
            itemOpen.Text = "&Open...";
            itemOpen.ShortcutKeys = Keys.Control | Keys.O; // Ctrl+O
            itemOpen.ShowShortcutKeys = true;// Отображать в команде
            itemOpen.Click += OpenOnClick;
            itemFile.DropDownItems.Add(itemOpen);
            // itemOpen.ShowShortcutKeys = false;// Скрыть комбинацию 
    
            // Разделитель
            ToolStripSeparator itemSep = new ToolStripSeparator();
            itemFile.DropDownItems.Add(itemSep);
    
            // Команда Exit
            ToolStripMenuItem itemExit = new ToolStripMenuItem();
            itemExit.Text = "E&xit";
            itemExit.Click += ExitOnClick;
            itemFile.DropDownItems.Add(itemExit);
    
            // Заполнение раздела Help
            // Команда About...
            ToolStripMenuItem itemAbout = new ToolStripMenuItem();
            itemAbout.Text = "&About...";
            itemAbout.ShortcutKeys = Keys.Control | Keys.A; // Ctrl+A
            itemAbout.ShortcutKeyDisplayString = "Ctrl^A";// Свое отображение
            itemAbout.ShowShortcutKeys = true;// Отображать в команде
            itemAbout.Click += AboutOnClick;
            itemHelp.DropDownItems.Add(itemAbout);
        }
    
        // Обработчики событий
        void OpenOnClick(object sender, EventArgs e)
        {
            MessageBox.Show("Заготовка 
    опции \"Open\"", this.Text);
        }
    
        void ExitOnClick(object sender, EventArgs e)
        {
            this.Close();
        }
    
        void AboutOnClick(object sender, EventArgs e)
        {
            MessageBox.Show("Заготовка 
    опции \"About...\"", this.Text);
        }
    }
}
Листинг 14.1. Программа с меню в файле SimpleMenu.cs

В программе мы создаем объект меню, как экземпляр класса MenuStrip, и привязали его к объекту формы . У класса MenuStrip есть свойство Items, которое является коллекцией элементов меню верхнего уровня. Мы создаем два таких объекта itemFile и itemHelp типа ToolStripMenuItem и добавляем их в свойство Items. У каждого объекта типа ToolStripMenuItem есть свойство DropDownItems, готовое хранить коллекцию команд и разделителей, в том числе вложенных для построения меню сложной иерархии. В эти свойства элементов верхнего уровня мы добавляем объекты команд.

Схематично такая процедура построения меню примера изображена на рисунке

Символ амперсанда & в значении свойства Text наименования команды ассоциируется со знаком подчеркивания следующей за ним буквы и позволяет после нажатия клавиши Alt (не удерживая) вызывать команды простым нажатием соответствующих клавиш.

Свойство ShortcutKeys объекта команды ожидает побитовую комбинацию элементов перечисления System.Windows.Forms. Keys, задающую клавиши быстрого вызова этой команды. Булево свойство ShowShortcutKeys объекта команды включает отображение заданной комбинации быстрого вызова справа от команды (по умолчанию задано true ) в стандартном виде. Свойство ShortcutKeyDisplayString позволяет задать строку иного отображения установленной комбинации (например, вместо Ctrl+A задать Ctrl^A ).

Событие Click объекта команды возникает при выборе соответствующей команды и вызывает выполнение закрепленного обработчика.

Элементы в коллекцию мы добавляем методом Add() соответствующей коллекции. Однако можно использовать и метод коллекции AddRange(), который ожидает ссылку на массив объектов команд. Так, например, пусть объекты itemFile, itemOpen, itemSep, itemExit уже созданы. Тогда к объекту верхнего уровня можно присоединить сразу все подчиненные объекты команд такой строкой кода:

itemFile.DropDownItems.AddRange(new ToolStripItem[]
{ itemOpen, itemSep, itemExit});
< Лекция 13 || Лекция 14 || Лекция 15 >
Максим Филатов
Максим Филатов

Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет:

Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.

 

Как активировать код?

Денис Пашков
Денис Пашков
Россия
Татьяна Ковалюк
Татьяна Ковалюк
Украина, Киев, Киевский политехнический институт, 1974