На этом шаге мы рассмотрим пример использования указанных компонентов.
Далее описывается еще одна программа, при выполнении которой появляется окно с изображением животных. Но теперь мы для выбора изображения будем использовать главное меню и панель инструментов. Как выглядит в этом случае окно, показано на рисунке 1.
Рис.1. Окно с главным меню и панелью инструментов
Окно в этом случае содержит изображение в центральной части. Под изображением есть кнопка с названием животного. Над изображением размещена панель инструментов из четырех кнопок. Каждая кнопка содержит миниатюрное изображение животного, а при наведении курсора мыши на кнопку появляется подсказка с названием животного (см. рисунок 1). В окне также есть главное меню из трех пунктов: Программа, Красивые и Сильные.
Изображение в окне меняется при щелчке по кнопке на панели инструментов или при выборе команды из меню. Вместе с изображением меняется и название кнопки. При щелчке по кнопке окно закрывается.
На рисунке 2 показано окно с изображением лисы. Также в окне раскрыт пункт меню Программа. В этом пункте всего одна команда Выход, при выборе которой завершается работа программы.
Рис.2. Содержимое пункта меню Программа
На рисунке 3 показано окно программы с изображением енота. В окне открыт пункт меню Красивые. В этом пункте меню содержатся команды Лиса и Енот. Команды предназначены для выбора животного, изображение которого будет показано в окне.
Рис.3. Содержание пункта меню Красивые
На рисунке 4 окно содержит изображение медведя, и при этом открыт пункт меню Сильные. В этом пункте меню есть две команды Волк и Медведь, предназначенные для выбора животного.
Рис.4. Содержание пункта меню Сильные
Теперь рассмотрим программный код, выполнение которого приводит к появлению описанного выше окна.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.Windows.Forms; namespace pr280_1 { // Класс окна: class MyForm: Form { // Путь к каталогу с изображениями: private string path=""; // Ссылка на объект метки: private Label pict; // Ссылка на объект кнопки: private Button btn; // Конструктор: public MyForm(): base() { // Размеры окна: this.Size = new Size(240, 230); // Начальное положение окна: this.StartPosition = FormStartPosition.CenterScreen; // Заголовок окна: this.Text = "B мире животных"; // Окно постоянных размеров: this.FormBorderStyle = FormBorderStyle.FixedSingle; // Окно нельзя развернуть на весь экран: this.MaximizeBox = false; // Объект для главного меню: MainMenu menu = new MainMenu(); // Объект для пункта меню "Программа": MenuItem prog = new MenuItem("Программа"); // Добавление команды в пункт меню "Программа": prog.MenuItems.Add("Bыxoд", OnButtonClick); // Объект для пункта меню "Красивые": MenuItem beautiful = new MenuItem("Красивые"); // Объект для команды "Лиса": MenuItem fox = new MenuItem("Лиса"); // Обработчик для команды "Лиса": fox.Click += (x, y) => { set("Лиса", "fox.jpg"); }; // Объект для команды "Енот": MenuItem raccoon = new MenuItem("Eнот"); // Обработчик для команды "Енот": raccoon.Click += (x, y) => { set("Енот","raccoon.jpg"); }; // Добавление команд в меню "Красивые": beautiful.MenuItems.Add(fox); beautiful.MenuItems.Add(raccoon); // Объект для пункта меню "Сильные": MenuItem strong = new MenuItem("Сильные"); // Объект для команды "Медведь": MenuItem bear = new MenuItem("Медведь"); // Обработчик для команды "Медведь": bear.Click += (x, y) => { set("Медведь", "bear.jpg"); }; // Объект для команды "Волк": MenuItem wolf = new MenuItem("Волк"); // Обработчик для команды "Волк": wolf.Click += (x, y) => { set("Волк", "wolf.jpg"); }; // Добавление команд в меню "Сильные": strong.MenuItems.Add(wolf); strong.MenuItems.Add(bear); // Добавление пунктов в главное меню: menu.MenuItems.Add(prog); menu.MenuItems.Add(beautiful); menu.MenuItems.Add(strong); // Назначение главного меню для окна: this.Menu = menu; // Объект для панели инструментов: ToolStrip ts = new ToolStrip(); // Кнопки для панели инструментов: ToolStripButton tsbA = new ToolStripButton(Image.FromFile(path + "fox.jpg")); ToolStripButton tsbB = new ToolStripButton(Image.FromFile(path + "raccoon.jpg")); ToolStripButton tsbC = new ToolStripButton(Image.FromFile(path + "wolf.jpg")); ToolStripButton tsbD = new ToolStripButton(Image.FromFile(path + "bear.jpg")); // Всплывающие подсказки для кнопок // на панели инструментов: tsbA.ToolTipText = "Лиса"; tsbB.ToolTipText = "Енот"; tsbC.ToolTipText = "Волк"; tsbD.ToolTipText = "Медведь"; // Обработчики для событий, связанных со щелчком // по кнопкам на панели инструментов: tsbA.Click += (x, y) => fox.PerformClick(); tsbB.Click += (x, y) => raccoon.PerformClick(); tsbC.Click += (x, y) => wolf.PerformClick(); tsbD.Click += (x, y) => bear.PerformClick(); // Добавление кнопок на панель инструментов: ts.Items.Add(tsbA); ts.Items.Add(tsbB); ts.Items.Add(tsbC); ts.Items.Add(tsbD); // Добавление панели инструментов в окно: this.Controls.Add(ts); // Объект метки: pict = new Label(); // Координаты и размеры метки: pict.SetBounds(35, 25, 154, 104); // Рамка для метки: pict.BorderStyle = BorderStyle.FixedSingle; // Добавление метки в окно: this.Controls.Add(pict); // Объект кнопки: btn = new Button(); // Координаты кнопки: btn.Left = pict.Left + 20; btn.Top = pict.Bottom + 10; // Размеры кнопки: btn.Width = pict.Width - 40; btn.Height=30; // Шрифт для кнопки: btn.Font = new Font("Courier New", 12, FontStyle.Bold); // Обработка события, связанного со щелчком // по кнопке в окне: btn.Click += OnButtonClick; // Добавление кнопки в окно: this.Controls.Add(btn); // Программный щелчок на команде "Волк": wolf.PerformClick(); } // Закрытый метод (вызывается при щелчке // на команде из меню): private void set(string name, string file) { // Название для кнопки: btn.Text = name; // Изображение для метки: pict.Image = Image.FromFile(path + file); } // Закрытый метод (вызывается при щелчке // по кнопке в окне): private void OnButtonClick(object obj, EventArgs ea){ Application.Exit(); } } // Главный класс: class Program { [STAThread] // Главный метод: static void Main() { // Отображение окна: Application.Run(new MyForm()); } } }
Класс окна MyForm создается наследованием класса Form. В классе есть несколько закрытых полей. Текстовое поле path содержит полный путь к каталогу с файлами изображений. Поле pict является объектной ссылкой класса Label и предназначено для запоминания ссылки на объект метки с изображением. Также мы используем поле btn. Это ссылка на объект кнопки (создается на основе класса Button).
В конструкторе класса MyForm() задаются размеры окна (команда
this.Size = new Size(240,230);
this.StartPosition = FormStartPosition.CenterScreen;
this.Text = "B мире животных";
this.FormBorderStyle = FormBorderStyle.FixedSingle;
this.MaximizeBox = false; .
Объект для главного меню menu создается командой
MainMenu menu = new MainMenu();
MenuItem prog = new MenuItem("Программа"); , MenuItem beautiful = new MenuItem("Красивые");
MenuItem strong = new MenuItem("Сильные"); .
menu.MenuItems.Add(prog); , menu.MenuItems.Add(beautiful);
menu.MenuItems.Add(strong); .
this.Menu = menu; .
В пункты главного меню добавляются команды. Для добавления команды в пункт меню можно из его свойства MenuItems (ссылка на коллекцию элементов из пункта меню) вызывать метод Add(). Аргументами методу передают название команды и название метода, который будет вызываться при выборе команды. Так мы поступаем, когда инструкцией
prog.MenuItems.Add("Bыxoд", OnButtonClick);
Добавлять команду в пункт меню можно другим способом. В этом случае на основе класса MenuItem создается объект команды. Так происходит при выполнении инструкций
MenuItem fox = new MenuItem("Лиса"); , MenuItem raccoon = new MenuItem("Eнот"); , MenuItem bear = new MenuItem("Медведь"); и MenuItem wolf = new MenuItem("Волк"); .
Для добавления команд в пункты меню используется уже знакомый нам метод Add(), который вызывается из объекта пункта меню, а аргументом методу передается ссылка на объект команды. Примером являются инструкции
beautiful.MenuItems.Add(fox); , beautiful.MenuItems.Add(raccoon); , strong.MenuItems.Add(wolf); и strong.MenuItems.Add(bear); .
Для определения обработчиков для команд, добавленных в пункты меню Красивые и Сильные, используются лямбда-выражения. Ссылка на анонимный метод, определенный с помощью лямбда-выражения, добавляется в список обработчиков события Click объекта команды меню. В теле анонимного метода вызывается закрытый метод set(). Метод set() получает два аргумента: текстовое значение name с названием для кнопки (команда
btn.Text = name;
pict.Image = Image.FromFile(path + file);
Объект ts для панели инструментов создается на основе класса ToolStrip командой
ToolStrip ts = new ToolStrip(); .
Обработку событий, связанных со щелчком по кнопкам на панели инструментов, мы реализуем следующим образом: при щелчке по кнопке происходит программное генерирование события, связанного с выбором соответствующей команды из меню. Для этого в список обработчиков события Click объекта кнопки добавляется анонимный метод, определяемый лямбда-выражением. В теле лямбда-выражения использован метод PerformClick(), выполнение которого означает программный щелчок по команде из меню (метод вызывается из объекта этой команды). Для добавления кнопок на панель инструментов из свойства Items (ссылка на коллекцию элементов панели меню) объекта панели вызывается метод Add(). Ссылка на объект добавляемой кнопки указывается аргументом метода. Наконец, командой
this.Controls.Add(ts);
Также в конструкторе создается объект метки, задаются ее размеры, положение и тип рамки. Метка добавляется в окно.
Также создается кнопка. Определяются ее размеры, положение, шрифт, а в качестве обработчика регистрируется метод OnButtonClick(). После добавления кнопки в окно выполняется команда
wolf.PerformClick(); ,
В главном методе программы командой
Application.Run(new MyForm());
На следующем шаге мы рассмотрим контекстное меню.