Урок 8. Работаем с меню

Сейчас мы с вами рассмотрим, как использовать меню (а точнее, главное меню - экземпляр класса MainMenu) в программах на C#. Главное, что мы сделаем - это динамическое добавление пунктов меню и обработчиков для них.

Программа наша будет работать так - при нажатии на кнопку (а это будет единственная кнопка на форме) в главное меню будет добавляться еще один подпункт. Текст на этом подпункте будет очередное число ("1", "2",...). При выборе любого пункта меню будет появляться messagebox с текстом, совпадающим с текстом на нажатом пункте меню.

Итак, создайте новый Windows-проект, разместите на форме кнопку и добавьте MainMenu из окна Toolbox:

MainMenu добавится не на саму форму, а ниже (и это логично, так как мы не можем задать точного положения главного меню на форме - x и y, например; так что и особого смысла в расположении на самой форме нет). В меню задайте имя самого первого пунта как "Menu". После этого наша форма будет выглядеть примерно так:

Теперь приступаем к коду.

Во-первых, добавим в класс переменную-счетчик и присвоим ей начальное значение:

public int num = 0;

Эта переменная будет увеличиваться на единицу при добавлении каждого нового пункта меню.

Теперь напишем обработчик для нажатия кнопки. Текст обработчика будет следующий:

private void button1_Click(object sender, System.EventArgs e)

{

// Увеличиваем счетчик пунктов меню.

num++;

// Создаем новый подпункт меню.

// Для него задаем надпись

// и обработчик выбора пользователем этого пункта.

MenuItem mi = new MenuItem(num.ToString(),

new System.EventHandler(this.menuItem_Click));

// Подсоединяем новый пункт меню к главному меню формы.

mainMenu1.MenuItems[0].MenuItems.Add(mi);

}

Обратите внимание, что в качаестве имени обработчика мы задали menuItem_Click. Разумеется, функцию с таким именем мы должны добавить в класс формы:

private void menuItem_Click(object sender, System.EventArgs e)

{

// Читаем текст на выбранном пользователе пункте меню.

string s = ((MenuItem)sender).Text;

// Выводим этот текст.

MessageBox.Show(s);

}

Посмотрите, как мы тут выясняем, какой пункт меню обрабатывается (а эта функция является обработчиком для всех пунктов нашего меню) - мы просто берем у передаваемого в функцию параметра sender свойство Text (предварительно мы приводим наш параметр к типу MenuItem):

...

string s = ((MenuItem)sender).Text;

...

Все! Компилируем и запускаем программу. Сколько раз мы нажмем на кнопку на форме, столько у нас появится новых подпунктов для меню:

И при выборе соответствующего пункта меню появится messagebox с соответствующим тестом, совпадающим с текстом на пункте меню.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: