Конечные пункты меню MenuItem

Контекстное меню ContextMenu

Главное меню MainMenu

 

Для создания главного меню можно использовать один из трех конструкторов класса MainMenu:

 

public MainMenu()

public MainMenu (MenuItem[] menuItems)

public MainMenu (IContainer container)

 

После создания объекта MainMenu, необходимо вызвать свойство формы Menu и передать ему имя объекта MainMenu. Свойство Menu формы доступно как для записи, так и для чтения. Это свойство позволяет заменять в процессе работы приложения, одно меню формы другим.

 

Для создания контекстного меню можно использовать один из двух

конструкторов класса ContextMenu:

 

public ContextMenu ()

public ContextMenu (MenuItem[] menuItems)

 

Обычно контекстное меню связано с, каким либо, элементом управления, то есть при щелчке правой кнопкой мыши на поверхности элемента управления появляется контекстное меню. Для того чтобы связать объект, являющийся контекстным меню, с элементом управления необходимо использовать свойство ContextMenu элемента, унаследованное им от класса Control. Свойство ContextMenu доступно как для записи, так и для чтения.

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

public void Show (Control control, Point pos),

где первый параметр – это ссылка на элемент управления, к которому относится контекстное меню, а второй – координата точки, где будет выведено контекстное меню.

 

 

Для создания конечных пунктов меню можно использовать один из конструкторов класса MenuItem:

 

public MenuItem (),

public MenuItem ( string text),

public MenuItem ( string text, EventHandler onClick),

public MenuItem ( string text, MenuItem[] items),

public MenuItem ( string text, EventHandler onClick, Shortcut shortcut),

где:

text – название пункта меню,

onClick – объект типа EventHandler, который является делегатом. С помощью

onClick вызывается функция обработчик пункта меню.

shortcut – комбинация клавиш для быстрого вызова пункта меню.

Shortcut - это перечисление допустимых клавиатурный сочетаний для меню. Оно содержит около 150 различных сочетаний. Использовать в качестве комбинации клавиш, не определенных в перечислении не допустимо.

В качестве примера создадим приложение, в котором имеется главное меню из двух пунктов и каждый пункт содержит два подпункта. При выборе любого пункта подменю на экран монитора выводится окно сообщения MessageBox текст, которого соответствует названию пункта. Подменю первого пункта меню верхнего уровня может вызываться с помощью быстрых клавиш ALT+1 и ALT+2.

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

 

namespace Menu1

{

public partial class Form1 : Form

{

// Объявление ссылок

MainMenu MnMen1; //Главное меню

//Первый пункт меню верхнего уровня

MenuItem pnkt1;

MenuItem pnkt1_1; //Первый пункт подменю

MenuItem pnkt1_2; //Второй пункт подменю

//Второй пункт меню верхнего уровня

MenuItem pnkt2;

MenuItem pnkt2_1; //Первый пункт подменю

MenuItem pnkt2_2; //Второй пункт подменю

 

public Form1() //Конструктор формы

{

InitializeComponent();

 

this.Text = "МЕНЮ";//Заголовок формы

 

// Создаем первый пункт меню верхнего уровня - массив из подпунктов

pnkt1_1 = new MenuItem("По&дпункт 1_1", new EventHandler(Msg1_1), Shortcut.Alt1);

pnkt1_1.ShowShortcut = false;

pnkt1_2 = new MenuItem("Подпункт 1_2", new EventHandler(Msg1_2), Shortcut.Alt2);

pnkt1 = new MenuItem("Пункт 1", new MenuItem[] { pnkt1_1, pnkt1_2 });

 

// Создаем второй пункт меню верхнего уровня - массив из подпунктов

pnkt2_1 = new MenuItem("Подпункт 2_1", new EventHandler(Msg2_1));

pnkt2_1.Checked = true;

pnkt2_2 = new MenuItem("Подпункт 2_2", new EventHandler(Msg2_2));

pnkt2_2.DefaultItem = true;

pnkt2 = new MenuItem("Пункт 2", new MenuItem[] { pnkt2_1, pnkt2_2 });

 

// Создаем главное меню - массив из пунктов верхнего уровня

MnMen1 = new MainMenu(new MenuItem[] { pnkt1, pnkt2 });

 

this.Menu = MnMen1;//Связываем меню с формой

}

 

//Ниже представлены обработчики пунктов меню

 

void Msg1_1(object sr, EventArgs e)

{

MessageBox.Show("Подпункт 1_1" + pnkt1_1.Shortcut);

}

void Msg1_2(object sr, EventArgs e)

{

MessageBox.Show("Подпункт 1_2");

}

void Msg2_1(object sr, EventArgs e)

{

MessageBox.Show("Подпункт 2_1");

}

void Msg2_2(object sr, EventArgs e)

{

MessageBox.Show("Подпункт 2_2");

}

}

}

После запуска приложения на выполнение на экране монитора появится окно с пунктами меню верхнего уровня:

 

 

Рис

 

При щелчке мышью на пункте меню “Пункт 1”появляется подменю:

 

 

Рис

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

pnkt1_1.ShowShortcut = false;

Наконец после щелчка на конечном пункте меню мы имеем результат:

 

 

Рис

Если выбрать пункт 2 меню верхнего уровня, то мы увидим галочку слева на пункте “Подпункт 2_1”, подменю, что обусловлено строкой кода приложения:

pnkt2_1.Checked = true;

Если Вы заметили, текст названия пункта “Подпункт 2_2” подменю выделен полужирным шрифтом:

 

Рис

 

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

pnkt2_2.DefaultItem = true;

При анализе кода приложения, обратите внимание, что сначала создаются пункты подменю, затем из этих пунктов создается пункт меню верхнего уровня, и в последнюю очередь из пунктов меню верхнего уровня “собирается” главное меню.

Если необходимо в подменю отделить визуально одну группу пунктов от другой горизонтальной линией, то необходимо объявить пункт меню следующим образом:

MenuItem pnkt = new MenuItem(“-“);

Прочерк в качестве имени подменю распознается как разделитель.

 

Свойства класса MenuItem

 

Класс MenuItem содержит большое количество свойств. Используя эти свойства можно динамически изменять внешний вид меню, управлять доступом к пунктам меню и т.п.

Некоторые из свойств класса MenuItem:

 

1. Shortcut - позволяет устанавливать новое сочетание клавиш для быстрого доступа к меню,

2. ShowShortcut - установка значения свойства false запрещает вывод, справа от названия пункта меню, сочетания клавиш быстрого доступа к меню, true - разрешает

3. Text - позволяет изменять название пунктов меню

4. Visible – разрешает (true ) - запрещает (false) отбражение пунктов меню.

5. Enabled ­– блокирует пункт меню при установке его в значение false и разблокирует при установке в true. Заблокированный пункт меню становится серым.

6. DefaultItem – установка его в true приводит к тому, что данный пункт меню становится пунктом меню по умолчанию, то есть, при двойном щелчке на пунте меню верхнего уровня, это пункт подменю сразу вызывается. Текст заголовка такого подменю выводится полужирным шрифтом.

7. Checked – установка его в true приводит к тому, что слева от названия пункта подменю выводится галочка.