Загрузка...

Создание системы меню в приложении и панели инструментов при помощи Visual Studio


Лабораторная работа № 3

Тема: «Создание системы меню в приложении и панели инструментов при помощи Visual Studio.»

Создадим на форме систему меню, при помощи которой пользователь сможет выполнять различные операции. В пространстве имен System Wi ndows . Forms предусмотрено большое количество типов для организации ниспадающих главных меню (расположенных в верхней части формы) и контекстных меню, открывающихся по щелчку правой кнопки мыши. Создадим стандартное ниспадающее меню, которое позволит пользователю выйти из приложения, выбрав пункт File (Файл) > Exit (Выход).

Класс System. Windows. Forms. Menu. является базовым для таких часто используемых производных классов, как MainMenu, MenuItem и ContextMenu.

Windows. Forms. Menu — это абстрактный класс, и невозможно создать объект этого класса напрямую. В приложении используются только объекты производных типов. Класс Menu обеспечивает важнейшие функции любых видов меню. Класс Menu определяет вложенный класс MenuItemCollection, который наследуется всеми тремя производными классами; и MainMenu,

и MenuItem, и ContextMenu. МеnuItemCollection предназначен для хранения информации об элементах меню, к которым можно получить доступ через свойство Menu. MenuItems

Главные члены базового класса Menu представлены в табл. 1.

Таблица 1. Члены класса Menu

 

Создание системы меню в приложении

Код для этого может выглядеть следующим образом:

public class MainForm : Form

{

// Главное меню для формы

private MainMenu mainMenu;

public Form1 ( )

{

// Создаем главное меню

mainMenu = new MainMenu( );

}

После того как создан объект MainMenu, необходимо использовать метод Menu$MenuItemCollection. Add(), чтобы вставить элемент меню верхнего уровня (например, File). Метод Menu$MenuItemCollection.Add() вернет новый объект MenuItem, который представляет только что вставленный в главное меню элемент File. Чтобы добавить в меню File пункт Exit (Выход), необходимо вставить в коллекцию Menu$MenuItemCollection, новый объект MenuItem. Если потребуется поместить внутрь меню прочие элементы, это делается точно так же. После того как вставка элементов в меню завершена, последнее, что необходимо сделать, — присоединить созданную систему меню к форме, используя для этого свойство Form, Menu. Выглядеть все это может так:

public class MainForm: Form

{

// Главное меню для Form

private MainMenu mainMenu;

public Form1()

{

// Создаем главное меню

mainMenu = new MainMenu();

// Создаем меню File и добавляем его и MenuItemCollection

MenuItem miFile = mainMenu. MenuItems. Add(“&File»);

// Теперь создаем подменю Exit и добавляем его в меню File.

miFileMenuItems.Add(new MenuItem(“&Exit»))

new EventHandler(this.FileExit_Clicked, Shortcut.CtrlX);

// Присоединяем главное меню к объекту Form

this.Menu = mainMenu;

Обратите внимание на использование символа амперсанда (&) в названии элемента меню. Символ, перед которым стоит амперсанд, определяет букву, которая будет подчеркнута в названии элемента меню. Данный элемент будет активизироваться при нажатии соответствующей этой букве клавиши. Таким образом, если указали название меню как &File, то можно открыть меню File при помощи клавиатурной комбинации Alt+F.

При добавлении пункта меню Exit указали еще и дополнительную клавиатурную комбинацию Ctrl+X. Значения для подобных клавиатурных комбинаций приведены в перечислении System. Wi ndows. Forms. Shortcut. В нем представлены как привычные всем комбинации Ctrl+C, Ctrl+V, Fl, F2 INS, так и более экзотические.

Теперь мы можем создать уже полное приложение, использующее меню. Обра-

тите внимание на небольшой трюк — как, оказывается, можно установить, напри-

мер, значение свойства BackColor при помощи метода MainMenu.GetForm():

// Простое приложение с главным меню

public class MainForm : Form

{

// Главное меню для формы

private MainMenu mainMenu;

// Запускаем приложение

public static int Main(string[] args)

Application. Run(new Form1()):

// Создаем форму

public Form1()

(

// Настраиваем исходный облик и местонахождение формы

Text = «Menu»;

CenterToScreen();

// Создаем объект главного меню

mainMenu = new MainMenu();

// Создаем меню File | Exit

MenuItem miFile — mainMenu.MenuItems.Add(«&File»);

miFile.MenuItems.Add(new MenuItem(«&Exit»,

new EventHandler(this.FileExitClicked), Shortcut.CtrlX));

// Присоединяем главное меню к объекту Form

this. Menu = mainMenu;

// MainMenu. GetForm() возвращает ссылку на форму, на которой расположено меню.

mainMenu. GetForm(). BackColor * Color. Black;

// обработчик событий для File — Exit

private void FileExitClicked(object sender, EventArgs e)

{

this. Close(); // Выход из приложения

 

Если необходимо создать еще одно меню верхнего уровня HeLp (Справка) с единственным пунктом About (0 программе). Логика при создании Help > About, будет точно такой же, как и при создании File > Exit добавляем новый объект MenuItem в коллекцию внутри объекта MainMenu, а затем добавляем в этот объект MenuItem еще один Menu Item для About:

public class Form1 : Form

{

private MainMenu mainMenu;

public Form1()

{

// Создаем меню File > Exit

Menuitem miFile = mainMenu.MenuItems.Add(“&File»);

miFile.MenuItems.Add(new MenuItem(“&Exit», new EventHandler(this.FileExit_Clicked). Shortcut.CtrlX));

// теперь создаемеще и меню Help > About

MenuItem miHelp = mainMenu.MenuItems.Add(«Help»);

miHelp.MenuItems.Add(new MenuItem(“About», new EventHandler(this.helpAbout_Clicked), Shortcut.CtrlA));

}

// И обработчик события для Help-About

private void HelpAbout_Clicked(object sender. EventArgs e)

{

MessageBox.Show(“Приложение1…»); }}

 

Создание контекстного меню

Для создания контекстного меню, которое открываются по щелчку правой кнопкой мыши. Контекстные меню создаются при помощи класса ContextMenu. Как и в случае с MainMenu, необходимо добавить объекты MenuItem в коллекцию MenuItemCollection внутри объекта ContextMenu. В приведенном ниже примере контекстное меню позволяет пользователю выбрать размер шрифта для текстовой строки, выводимой на форму:

Создайте приложение с именем Menu, и добавьте ниже приведенный код программы.

namespace Menu

{

// Вспомогательная структура для установки размера шрифта

internal struct TheFontSize

   {

      public static int Huge = 30;

      public static int Normal = 20;

      public static int Tiny = 8;}}

public class Form1 : System.Windows.Forms.Form

   {

      

      private System.ComponentModel.Container components = null;

      private MainMenu mainMenu;

// Контекстное меню формы

      private ContextMenu popUpMenu;

// Исходный размер шрифта

      private int currFontSize = TheFontSize.Normal;

      public Form1()

      {

         mainMenu = new MainMenu( );

         

         InitializeComponent();

         MenuItem miFile = mainMenu.MenuItems.Add(«&File»);

         // Теперь создаем подменю Exit и добавляем его в меню File.

         miFile.MenuItems.Add(new MenuItem(«&Exit»,

            new EventHandler(this.FileExitClicked), Shortcut.CtrlX));

         // Присоединяем главное меню к объекту Form

         this.Menu = mainMenu;

// Cоздаем контекстное меню

         popUpMenu = new ContextMenu();

         // Теперь добавляем в контекстное меню элементы

         popUpMenu.MenuItems.Add(«Увеличить«, new EventHandler(PopUp_Clicked));

         popUpMenu.MenuItems.Add («Нормальный размер«, new EventHandler(PopUp_Clicked)) ;

         popUpMenu.MenuItems.Add(«Уменьшить«,new EventHandler(PopUp_Clicked));

         // подключаем контекстное меню к форме

         this.ContextMenu = popUpMenu;

         // Ставим обработчики событий

         this. Resize += new System. EventHandler(this.Form1_Resize);

         this. Paint +=new PaintEventHandler(Form1_Paint); }   

   

      private void PopUp_Clicked(object sender, EventArgs e)

   {

      //// Ориентируемся на строковое имя выбранного пользователем элемента меню

      MenuItem miClicked = (MenuItem)sender;

      string item = miClicked.Text;

      if(item == «Увеличить«)

      currFontSize = TheFontSize.Big;

      if (item == «Нормальный размер«)

      currFontSize = TheFontSize. Normal ;

      if (item == «Уменьшить«)

      currFontSize = TheFontSize.Small;

      Invalidate() ;}

      private void Form1_Paint(object sender, PaintEventArgs e)

      {

         Graphics g = e.Graphics;

         g.DrawString(«Нажми на правую кнопку мыши«, new Font(«Times New Roman», (float)currFontSize), new SolidBrush(Color.Black), this.DisplayRectangle);

      }

   private void FileExitClicked(object sender, EventArgs e)

{

   this. Close();

}

   protected override void Dispose( bool disposing )

{

   if( disposing )

{

   if (components != null)

{

   components.Dispose();

}

}

   base.Dispose( disposing );

}

 

   #region Windows Form Designer generated code

   private void InitializeComponent()

{

   this.components = new System.ComponentModel.Container();

   this.Size = new System.Drawing.Size(300,300);

   this.Text = «Form1»;

}

   #endregion

 

   

   [STAThread]

   static void Main()

{

   Application.Run(new Form1());

}

      

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

{

   Invalidate();}

   }

}

 

Дополнительные возможности меню

В классе MenuItem определены свойства, при помощи которых можно, к примеру, устанавливать флажок напротив пункта меню, прятать пункты меню, делать некоторые пункты меню недоступными и т. п. Вот перечень свойств, обеспечивающих подобные возможности.

Таблица 2. Свойства Menultem, обеспечивающие дополнительные возможности меню

Член

Назначение

 

Handle

Это свойство обеспечивает доступ к значению HMENU, идентифицирующему

данное меню

IsParent

Это свойство определяет, содержит ли данное ме^о какие-либо подменю или оно является конечным

Menultems

Это свойство возвращает объект вложеьного класса Menu.MenuItemCollection, который представляет подменю, являющееся вложенным для текущего меню

GetMainMenu()

Возвращает объект MainMenu, в котором содержится текущее меню

CloneMenu ()

Создает меню, являющееся полной копией другого меню (создается полная локальная копия, а не ссылка на существующее меню)

 

Для иллюстрации этих возможностей изменим приложение с контекстным меню таким образом, чтобы рядом с пунктом меню, соответствующим выбранному в настоящий момент размером шрифта, ставился флажок. Сам флажок установить совершенно не сложно: для этого достаточно просто установить для свойства Checked пункта меню значение true. Однако для того, чтобы правильно устанавливать флажок напротив нужного пункта меню, нам потребуется дополнительная логика. Один из возможных подходов заключается в том, чтобы определить четыре ссылки на объекты MenuItem: три будут соответствовать варианту «флажок установлен» для каждого из трех пунктов меню, а четвертая (которая в списке идет первой) будет представлять выбранный в настоящий момент элемент меню:

public class Form1 : Form

(

// Текущий размер шрифта

private int currFontSize = TheFontSize.Normal;

// Контекстное меню для формы

private ContextMenu popUpMenu;

// Дополнительные ссылки для отслеживания пункта меню, напротив которого надо установить флажок

private MenuItem currentCheckedItem;

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

private MenuItem checkedBig;

private MenuItem checkedNormal;

private MenuItem checkedSmall;

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

// Конструктор формы

public Form1()

{

// Настраиваем исходный облик формы

Text = «PopUp Menu»;

CenterToScreen();

}

// создаем контекстное меню

popUpMenu = new ContextMenu();

// добавляем пункты меню

popUpMenu.MenuItems.Add(“Увеличить«, new EventHandler(PopUp_Clicked));

popUpMenu.MenuItems.Add(«Нормальный размер«, new EventHandler(PopUp_Clicked});

popUpMenu.MenuItems.Add(«Увеличить«, new EventHandler(PopUp_Clicked));

this.ContextMenu = popUpMenu;

// Теперь привязываем каждую из ссылoк на MenuItem к элементам контекстного меню

checkedBig = this.ContextMenu.MenuItemsх[0];

checkedNormal = this.ContextMenu.MenuItems[1];

checkedSmall = this.ContextMenu.MenuItems[2];

// теперь ставим флажок напротив Normal:

currentCheckedItem = checkedNormal;

currentCheckedItem.Checked = true;

}

Теперь осталось внести изменения в обработчик событий PopUp_Clicked () таким образом, чтобы при выборе пользователем пункта меню напротив этого пункта меню еще и устанавливался флажок:

 

private void PopUp_Cheked(object sender. EventArgs e)

{

// Снимаем флажок с выбранного в настоящий момент пункта

currentCheckedItem.Checked = false;

// Определяем название выбранного пользователем пункта меню

MenuItem miClicked = (MenuItem)sender;

string item = miClicked.Text;

// В ответ на выбор пользователя устанавливаем нужный размер шрифта и флажок

// напротив пункта меню

if(item = = «Увеличить«)

{

currFontSize = TheFontSize.Big;

currentCheckedItem = checkedBig;

}

if (item == «Нормальный размер«)

{

currFontSize = TheFontSize.Normal;

currentCheckedItem = checkedNormal;

}

if{item = = «Уменьшить«)

{

currFontSize = TheFontSize.Small;

currentCheckedItem = checkedSmall;

}

// устанавливаем флажок

currentCheckedItem.Checked = true;

Invalidate();

}

 

Создание меню при помощи IDE Visual Sudio.NET

Создайте новый проект Windows Application. Далее в окне Toolbox дважды щелкнете на значке MainMenu шаблон формы изменится: на самой форме появится меню с предложением ввести название первого элемента, а внизу — символ для объекта главного меню. Введем название первого пункта меню, чтобы ввести названия следующих пунктов, дважды щелкнете на этой же области. При помощи графических средств можно также настроить свойства любого элемента меню, а также — обработчик событий.

Для определения реакции на выбор пункта меню дважды щелкнете по нем, будет сгенерирован код, например

protected void OnMenuSave (object sender. System EventArgs e)

{// Здесь определяем реакцию на выбор пользователем пункта меню

}

При создании меню графическими средствами Visual Studio автоматически внесет необходимые изменения в служебный метод InitializeComponent() и добавит переменные-члены, представляющие созданные элементы меню.

 

Создание панели инструментов

Кнопки панели инструментов обеспечивают пользователям более легкий доступ к возможностям, которые определены в меню. Например, при нажатии пользователем на кнопку Save (Сохранить) эффект будет таким же, как и при выборе им пункта Save в меню File.

В пространстве имен System . Wi ndows . Forms предусмотрены типы, которые облегчают работу с панелями инструментов. Первый класс, который используется для создания панелей инструментов, — это класс Tool Bar. Наиболее важные свойства этого класса представлены в табл. 3.

Таблица 3. Свойства класса ToolBar

Свойство

Назначение

 

Checked

Позволяет получить или установить значение, определяющее, будет ли установлен флажок рядом с текстом пункта меню

Defaultltem

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

Enabled

Получает или устанавливает значение, определяющее, будет ли доступен тот или иной пункт меню

Index

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

Shortcut

Позволяет получить или установить клавиатурную комбинацию, используемую для активизации элемента меню в приложении

ShowShortcut

Позволяет получить или установить значение, определяющее, будет ли такая клавиатурная комбинация быстрого доступа выведена рядом с названием пункта меню

Text

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

 

Получить информацию о том, какая именно кнопка на панели инструментов была нажата:

private void Tool Bar_Cliсked (object sender. ToolBarButtonClickEventArgs e)

{

}

Добавление изображения на кнопки панели инструментов

В реальных приложениях кнопки на панели инструментов гораздо чаще несут насебе не надписи, а изображения. Если мы хотим изменить приложение таким образом, чтобы на кнопках панели инструментов появились изображения, первое,— создать на форме объект класса ImageList. Этот класс

представляет собой хранилище изображений, которое может использоваться объектами других классов (например, ToolBar). Выглядеть это может так:

public class Form1 : Form

// Объект для хранения набора изображений

private ImageList toolBarIcons = new ImageList();

private void BuildToolBar()

{

// Настройки кнопки «Save»

tbSaveButton.ImageIndex = 0;

tbSaveButton. ToolTipText = «Save»;

// Настраиваем кнопку «Exit»

tbExitButton.ImageIndex = 1;

tbExitButton. ToolTipText = «Exit»;

// Создание панели инструментов и добавление на нее кнопки

toolBar. ImageList = toolBarIcons;

// Загружаются значки (соответствующие файлы должны быть в каталоге приложения)

toolBarIcons. ImageSize = new System. Drawing. Size(32,32);

toolBarIcons. Images. Add(new Icon(«filesave.ico»)) ;

toolBarIcons. Images. Add( new Icon(«fi1eexit.ico»)) ;

toolBarIcons. ColorDepth = ColorDepth.Depthl6Bit;

toolBarIcons. TransparentColor = System. Drawing. Color. Transparent;

Обратите внимание на следующие моменты;

• для каждой кнопки нужно указать соответствующее ей изображение (при помощи свойства ImageIndex);

• изображения добавляются в объект ImageList при помощи метода Images. Add()

• для объекта ToolBar обязательно следует указать, какой именно объект ImageList будет использоваться при применении свойства ImageList.

 

 

Создание панели инструментов при помощи Visual Studio IDE

В Visual Studio.NET предусмотрены средства, которые позволяют добавить панель инструментов при помощи графических средств. Для этого откройте Toolbox и добавьте элемент управления ToolBar на вашу форму. Добавление кнопок на панель инструментов производится при помощи окна Properties (Свойства) для панели инструментов. В строке Buttons (Кнопки) щелкните на поле Collection (Коллекция), как показано на рис. 1. Откроется окно TooLBarButton Collection Editor (Редактор коллекции ToolBarButton), в котором можно легко создавать кнопки и настраивать их свойства (рис.2) .

 

Not Supported

Рисунок 1.

Not Supported

Рисунок 2.

Создаем набор изображений (объект ImageList)при помощи Visual Studio

При помощи Visual Studio.NET IDE можно не только создать панель инструментов и кнопки на ней, но и определить, какие изображения будут использоваться для кнопок. Первое, что нужно сделать — создать на форме объект ImageList. Это делается при помощи Toolbox.

Следующий шаг — открыть свойства объекта ImageList и с помощью свойства Images добавить в этот объект нужные изображения. Not Supported

После этого— ассоциировать панель инструментов с нужным объектом ImageList (поскольку таких объектов на форме может быть несколько). Делается это в окне свойств объекта ТооlBar.

Not Supported

 

И последнее, — вернуться в окно ToolBarButton CollectionEditor (Редактор коллекции ToolBarButton) и выбрать для каждой из кнопок нужный значок или в окне свойств выбрать соответствующее значение.Not Supported

 

Чтобы создать файл – иконки с расширением .ico. перейдите File – New – File

Not Supported

Графическими средствами создать изображение для кнопки и сохранить в папке проекта.

 

Индивидуальные задания:

1 –й Вариант

Создайте приложение с формой, которая содержит меню при выборе пунктов которого, можно управлять размером изображения. В окне приложения создать панель управления с шестью кнопками. По нажатию на первую кнопку в окне появляется окружность, на вторую — окружность изменяет цвет на синий, на третью – изменяется стиль линии окружности, на четвертую – окружность вытягивается в эллипс, на пятую – очистка экрана, шестую –выход из приложения.

2 –й Вариант

Создайте приложение с формой, которая содержит меню и панель управления. На кнопках панели должны быть изображены следующие фигуры: окружность, эллипс, квадрат, скругленный прямоугольник и кнопка для очистки окна. По нажатию на соответствующие кнопки на панели в окне приложения появляются соответствующие фигуры. При нажатии на кнопку с надписью ВЫХОД в окне приложения – приложение закрывается.

3 –й Вариант

Создать меню со следующими пунктами.

 

Окружности          Прямоугольники      Цвет      Выход

Круг               Квадрат         Синий

Горизонтальный эллипс      Прямоугольник      Зеленый

Вертикальный эллипс      Переименовать каталог   Красный

И соответствующую пунктам меню панель управления.

 

4–й Вариант

Создать меню со следующими пунктами.

 

   Нарисовать      Цвет      Стиль линии      Выход

   Круг         Синий      Сплошная

   Эллипс      Красный   Пунктирная      

   Квадрат      Желтый   Штрихпунктирная

   Линию      Зеленый   

И соответствующую пунктам меню панель управления.

 

5 –й Вариант

Создать меню со следующими пунктами.

 

Окно      Размер окна         Правка      Выход   

   Форма1   Во весь экран      Переименовать форму

         Свернуть      Изменить границу формы

         Развернуть      Сделать видимой

                  Сделать невидимой

                  Изменить фон

И соответствующую пунктам меню панель управления.

6–й Вариант

Создать меню со следующими пунктами.

 

Человечек      Пейзаж      Выход   

   Туловище      Солнце      

   Руки         Тучка      

   Ноги         Трава      

   Голова

И соответствующую пунктам меню панель управления.

 

Свойство

Назначение

BorderStyle

Определяет стиль рамки вокруг панели инструментов. Используются значения из перечисления BorderStyle

Buttons

Для работы с набором кнопок на панели инструментов (то есть с коллекцией ToolBa r$ToolBarButtonCol lection)

ButtonSize

Определяет размер кнопок на панели инструментов

ImageList

Возвращает элемент управления ImageList, в котором хранятся изображения, используемые на панели инструментов

Загрузка...