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

Автор: admin | 20 Июнь 2008 – 19:32 -


Урок 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 с соответствующим тестом, совпадающим с текстом на пункте меню.


Tags: , , , , , , , , ,
Находится в Windows и C# | No Comments »

Ответить

Вы должны быть в системе, дабы комментировать.


C# — язык программирования, сочетающий объектно-ориентированные и аспектно-ориентированные концепции. Разработан в 1998—2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как основной язык разработки приложений для платформы Microsoft .NET. Компилятор с C# входит в стандартную установку самой .NET, поэтому программы на нём можно создавать и компилировать даже без инструментальных средств вроде Visual Studio. Предлагаем любимые духи salvatore ferragamo. Бесплатная доставка . Информационные сайты о Японские грузовики. Тематические порталы про Японские грузовики. C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к С++ и Java. Язык имеет строгую статическую типизацию, поддерживает полиморфизм, перегрузку операторов, указатели на функции-члены классов, атрибуты, события, свойства, исключения, комментарии в формате XML. Переняв многое от своих предшественников — языков С++, Java, Delphi, Модула и Smalltalk — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем: так, C# не поддерживает множественное наследование классов (в отличие от C++).