Создание меню MenuStrip

Последнее обновление: 31.10.2015

Для создания меню в Windows Forms применяется элемент MenuStrip. Данный класс унаследован от ToolStrip и поэтому наследует его функциональность.

Наиболее важные свойства компонента MenuStrip:

  • Dock: прикрепляет меню к одной из сторон формы

  • LayoutStyle: задает ориентацию панели меню на форме. Может также, как и с ToolStrip, принимать следующие значения

    • HorizontalStackWithOverflow: расположение по горизонтали с переполнением - если длина меню превышает длину контейнера, то новые элементы, выходящие за границы контейнера, не отображаются, то есть панель переполняется элементами

    • StackWithOverflow: элементы располагаются автоматически с переполнением

    • VerticalStackWithOverflow: элементы располагаются вертикально с переполнением

    • Flow: элементы размещаются автоматически, но без переполнения - если длина панели меню меньше длины контейнера, то выходящие за границы элементы переносятся

    • Table: элементы позиционируются в виде таблицы

  • ShowItemToolTips: указывает, будут ли отображаться всплывающие подсказки для отдельных элементов меню

  • Stretch: позволяет растянуть панель по всей длине контейнера

  • TextDirection: задает направление текста в пунктах меню

MenuStrip выступает своего рода контейнером для отдельных пунктов меню, которые представлены объектом ToolStripMenuItem.

Добавить новые элементы в меню можно в режиме дизайнера:

Меню в C# и Windows Forms

Для добавления доступно три вида элементов: MenuItem (объект ToolStripMenuItem), ComboBox и TextBox. Таким образом, в меню мы можем использовать выпадающие списки и текстовые поля, однако, как правило, эти элементы применяются в основном на панели инструментов. Меню же обычно содержит набор объектов ToolStripMenuItem.

Также мы можем добавить пункты меню в коде C#:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        ToolStripMenuItem fileItem = new ToolStripMenuItem("Файл");
            
        fileItem.DropDownItems.Add("Создать");
        fileItem.DropDownItems.Add(new ToolStripMenuItem("Сохранить"));

        menuStrip1.Items.Add(fileItem);

        ToolStripMenuItem aboutItem = new ToolStripMenuItem("О программе");
        aboutItem.Click += aboutItem_Click;
        menuStrip1.Items.Add(aboutItem);
    }

    void aboutItem_Click(object sender, EventArgs e)
    {
        MessageBox.Show("О программе");
    }
}

ToolStripMenuItem в конструкторе принимает текстовую метку, которая будет использоваться в качестве текста меню. Каждый подобный объект имеет коллекцию DropDownItems, которая хранит дочерние объекты ToolStripMenuItem. То есть один элемент ToolStripMenuItem может содержать набор других объектов ToolStripMenuItem. И таким образом, образуется иерархическое меню или структура в виде дерева.

Если передать при добавление строку текста, то для нее неявным образом будет создан объект ToolStripMenuItem: fileItem.DropDownItems.Add("Создать")

Назначив обработчики для события Click, мы можем обработать нажатия на пункты меню: aboutItem.Click += aboutItem_Click

Отметки пунктов меню

Свойство CheckOnClick при значении true позволяет на клику отметить пункт меню. А с помощью свойства Checked можно установить, будет ли пункт меню отмечен при запуске программы.

Еще одно свойство CheckState возвращает состояние пункта меню - отмечен он или нет. Оно может принимать три значения: Checked (отмечен), Unchecked (неотмечен) и Indeterminate (в неопределенном состоянии)

Например, создадим ряд отмеченных пунктов меню и обработаем событие установки / снятия отметки:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        ToolStripMenuItem fileItem = new ToolStripMenuItem("Файл");

        ToolStripMenuItem newItem = new ToolStripMenuItem("Создать") { Checked = true, CheckOnClick = true };
        fileItem.DropDownItems.Add(newItem);


        ToolStripMenuItem saveItem = new ToolStripMenuItem("Сохранить") { Checked = true, CheckOnClick = true };
        saveItem.CheckedChanged += menuItem_CheckedChanged;

        fileItem.DropDownItems.Add(saveItem);

        menuStrip1.Items.Add(fileItem);
    }

    void menuItem_CheckedChanged(object sender, EventArgs e)
    {
        ToolStripMenuItem menuItem = sender as ToolStripMenuItem;
        if (menuItem.CheckState == CheckState.Checked)
            MessageBox.Show("Отмечен");
        else if (menuItem.CheckState == CheckState.Unchecked)
            MessageBox.Show("Отметка снята");
    }
}

Клавиши быстрого доступа

Если нам надо быстро обратиться к какому-то пункту меню, то мы можем использовать клавиши быстрого доступа. Для задания клавиш быстрого доступа используется свойство ShortcutKeys:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        ToolStripMenuItem fileItem = new ToolStripMenuItem("Файл");
         
		ToolStripMenuItem saveItem = new ToolStripMenuItem("Сохранить") { Checked = true, CheckOnClick = true };
        saveItem.Click+=saveItem_Click;
        saveItem.ShortcutKeys = Keys.Control | Keys.P;
        
		fileItem.DropDownItems.Add(saveItem);
		menuStrip1.Items.Add(fileItem);
    }

    void saveItem_Click(object sender, EventArgs e)
    {
        MessageBox.Show("Сохранение");
    }
}

Клавиши задаются с помощью перечисления Keys. В данном случае по нажатию на комбинацию клавиш Ctrl + P, будет срабатывать нажатие на пункт меню "Сохранить".

С помощью изображений мы можем разнообразить внешний вид пунктов меню. Для этого мы можем использовать следующие свойства:

  • DisplayStyle: определяет, будет ли отображаться на элементе текст, или изображение, или и то и другое.

  • Image: указывает на само изображение

  • ImageAlign: устанавливает выравнивание изображения относительно элемента

  • ImageScaling: указывает, будет ли изображение растягиваться, чтобы заполнить все пространство элемента

  • ImageTransparentColor: указывает, будет ли цвет изображения прозрачным

Если изображение для пункта меню устанавливает в режиме дизайнера, то нам надо выбрать в окне свойство пункт Image, после чего откроется окно для импорта ресурса изображения в проект

Чтобы указать, как разместить изображение, у свойства DisplayStyle надо установить значение Image. Если мы хотим, чтобы кнопка отображала только текст, то надо указать значение Text, либо можно комбинировать два значения с помощью другого значения ImageAndText. По умолчанию изображение размещается слева от текста:

Изображения в меню в Windows Forms

Также можно установить изображение динамически в коде:

fileToolStripMenuItem.Image = Image.FromFile(@"D:\Icons\0023\block32.png");
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850