НОУ ІНТУІТ, Лекція, Стандартні меню додатків

Недоліком цього коду є те, що ми прив'язали виклик форми вправи до індексу списку.

Вправа 1. Просте меню

Розглянемо просту програму, що імітує роботу меню.

  • Відкрийте файл Form1.cs у режимі View Code та додайте до конструктора класу код створення простого меню
  • Перепишіть виділені рядки коду реєстрації обробників події Click вручну, щоб правильно створити заготівлі обробників, та заповніть обробники наступним кодом

У програмі ми створюємо об'єкт меню як екземпляр класу MenuStrip і прив'язали його до об'єкта форми. Клас MenuStrip має властивість Items , яка є колекцією елементів меню верхнього рівня. Ми створюємо два таких об'єкти itemFile і itemHelp типу ToolStripMenuItem і додаємо їх у властивість Items. Кожен об'єкт типу ToolStripMenuItem має властивість DropDownItems , готове зберігати колекцію команд і роздільників, у тому числі вкладених для побудови меню складної ієрархії. До цих властивостей елементів верхнього рівня ми додаємо об'єкти команд.

Схематично така процедура побудови меню прикладу зображена малюнку

додатків

Амперсанда символ & у значенні властивості Text найменування команди асоціюється зі знаком підкреслення наступної за ним літери і дозволяє після натискання клавішіAlt(не утримуючи) викликати команди простим натисканням відповідних клавіш.Знак підкреслення в працюючій програмі з'являється тільки після натискання клавішіAlt .

Властивість ShortcutKeys об'єкта команди очікує побітову комбінацію елементів перерахування System. Windows .Forms. Keys , яка задає клавіші швидкого виклику цієї команди. Логічне властивість ShowShortcutKeys об'єкта команди включає абовимикає відображення заданої комбінації швидкого виклику праворуч від команди. За замовчуванням встановлено значення true і комбінація клавіш відображається в тому випадку, якщо вона призначена у властивості ShortcutKeys . Властивість ShortcutKeyDisplayString дозволяє встановити інший рядок відображення встановленої комбінації, ніж прийнято за умовчанням (наприклад, замістьCtrl+Aза замовчуванням можна задатиCtrl^A).

Подія Click об'єкта команди виникає при виборі відповідної команди та викликає виконання закріпленого оброблювача.

Слід мати на увазі, що як у колекції Items меню верхнього рівня, так і в колекціях DropDownItems меню, що випадають меню, відображаються в порядку їх додавання до колекції. Властивості Items і DropDownItems є екземплярами класу ToolStripItemCollection, який має метод Add(). Саме цим методом ми додаємо в колекції об'єкти елементів меню. Самі елементи меню, що додаються до колекції, є екземплярами класу ToolStripMenuItem.

Однак можна використовувати і метод колекції AddRange() , який очікує на масив об'єктів команд. Так, наприклад, нехай об'єкти itemFile, itemOpen, itemSep, itemExit вже створені. Тоді до об'єкта верхнього рівня можна приєднати відразу всі підпорядковані об'єкти команд таким рядком коду:

Перевантаження методу Add() дозволяють додати команду меню разом із текстом, текстом і зображенням, текстом + зображенням + іменем обробника події Click .

У коді вправи є одна вада. Посилання на команди меню оголошуються всередині конструктора як локальні змінні. Якщо елементами меню потрібно керувати з інших місць програми, ці змінні будуть недоступні. Логічне оголошувати посилання на елементи меню як поля класу.

Вправа 2. Меню зпрапорцями

У сучасних меню ліворуч від команд знаходиться стовпець, в якому можуть відображатись зображення або прапорці. У цій вправі розглянемо управління прапорцями.

Поява прапорця ліворуч від команди включається бульовою властивістю Checked об'єкта команди. В якості альтернативи можна встановити властивість CheckState в одне із значень однойменного перерахування. Наприклад, для об'єкта itemOpen це можна визначити так

  • itemOpen.CheckState = CheckState. Indeterminate;
  • itemOpen.CheckState = CheckState.Checked;
  • itemOpen.CheckState = CheckState. Unchecked;

Опція Indeterminate дозволяє відобразити невизначений стан, коли на місці прапорця міститься точка.

Бульова властивість CheckOnClick робить прапорець самокерованим, коли його стан змінюється по клацанню автоматично. Але якщо група прапорців використовується як радіокнопки для вибору одного з кількох взаємовиключних елементів, управління їх станом потрібно організовувати вручну.

У цій вправі ми створимо меню Font , яке виводитиме список шрифтів, що підтримуються комп'ютером. Зазвичай у сучасних операційних систем цей список великий і не розміщується на екрані, тому будемо використовувати об'єкт класу ToolStripDropDownMenu. Цей клас відповідає за появу стрілок, що дозволяють переміщатися по меню, що не вміщує команди. Тут ми використовуємо створення та налаштування меню частково у декларативному, частково у програмному режимі. Ну вже управління логікою роботи меню можна виконати тільки в програмному режимі.